From eee1bc96463274bbd3b19c10275a1f02d82c5d0a Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 4 Jan 2025 13:24:07 +0200 Subject: [PATCH] Custom chipset complete rewrite --- audio.cpp | 14 +- blitfunc.cpp | 176 +- blitter.cpp | 1939 +- cfgfile.cpp | 59 +- cia.cpp | 69 +- custom.cpp | 23644 +++---- debug.cpp | 834 +- devices.cpp | 3 +- disk.cpp | 6 +- drawing.cpp | 8765 +-- events.cpp | 171 +- genblitter.cpp | 8 +- genlinetoscr.cpp | 1728 +- include/audio.h | 9 +- include/blitter.h | 39 +- include/cia.h | 2 +- include/cpuboard.h | 1 - include/custom.h | 136 +- include/debug.h | 111 +- include/disk.h | 2 +- include/drawing.h | 261 +- include/events.h | 28 +- include/gui.h | 6 - include/newcpu.h | 2 - include/options.h | 7 +- include/savestate.h | 9 +- include/specialmonitors.h | 1 - linetoscr.cpp | 21120 ------ linetoscr_aga_fm0.cpp | 30462 ++++++++ linetoscr_aga_fm0_genlock.cpp | 13446 ++++ linetoscr_aga_fm1.cpp | 45242 ++++++++++++ linetoscr_aga_fm1_genlock.cpp | 21508 ++++++ linetoscr_aga_fm2.cpp | 58844 ++++++++++++++++ linetoscr_aga_fm2_genlock.cpp | 27448 +++++++ linetoscr_common.cpp | 1162 + linetoscr_ecs_shres.cpp | 603 + linetoscr_ocs_ecs.cpp | 16528 +++++ linetoscr_ocs_ecs_genlock.cpp | 7064 ++ linetoscr_ocs_ecs_ntsc.cpp | 16948 +++++ linetoscr_ocs_ecs_ntsc_genlock.cpp | 7400 ++ newcpu.cpp | 65 +- od-win32/avioutput.cpp | 2 +- .../genlinetoscr_msvc.vcxproj | 14 +- od-win32/resources/resource.h | 6 +- od-win32/resources/winuae.rc | 88 +- od-win32/rp.cpp | 2 +- od-win32/screenshot.cpp | 2 +- od-win32/win32.cpp | 17 +- od-win32/win32gfx.cpp | 6 +- od-win32/win32gui.cpp | 35 +- od-win32/writelog.cpp | 4 +- savestate.cpp | 13 +- specialmonitors.cpp | 271 +- 53 files changed, 263935 insertions(+), 42395 deletions(-) delete mode 100644 linetoscr.cpp create mode 100644 linetoscr_aga_fm0.cpp create mode 100644 linetoscr_aga_fm0_genlock.cpp create mode 100644 linetoscr_aga_fm1.cpp create mode 100644 linetoscr_aga_fm1_genlock.cpp create mode 100644 linetoscr_aga_fm2.cpp create mode 100644 linetoscr_aga_fm2_genlock.cpp create mode 100644 linetoscr_common.cpp create mode 100644 linetoscr_ecs_shres.cpp create mode 100644 linetoscr_ocs_ecs.cpp create mode 100644 linetoscr_ocs_ecs_genlock.cpp create mode 100644 linetoscr_ocs_ecs_ntsc.cpp create mode 100644 linetoscr_ocs_ecs_ntsc_genlock.cpp diff --git a/audio.cpp b/audio.cpp index 53842c66..f2701bf5 100644 --- a/audio.cpp +++ b/audio.cpp @@ -2593,15 +2593,17 @@ void AUDxDAT(int nr, uae_u16 v) AUDxDAT(nr, v, 0xffffffff); } -uaecptr audio_getpt(int nr, bool reset) +uaecptr *audio_getpt(int nr) { struct audio_channel_data *cdp = audio_channel + nr; - uaecptr p = cdp->pt; - cdp->pt += 2; - if (reset) - cdp->pt = cdp->lc; cdp->ptx_tofetch = false; - return p & ~1; + cdp->pt &= ~1; + return &cdp->pt; +} +uaecptr audio_getloadpt(int nr) +{ + struct audio_channel_data *cdp = audio_channel + nr; + return cdp->lc; } void AUDxLCH(int nr, uae_u16 v) diff --git a/blitfunc.cpp b/blitfunc.cpp index e444514d..7813ac2b 100644 --- a/blitfunc.cpp +++ b/blitfunc.cpp @@ -10,8 +10,8 @@ void blitdofast_0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bl { int i,j; uae_u32 totald = 0; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -30,8 +30,8 @@ void blitdofast_desc_0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, stru { uae_u32 totald = 0; int i,j; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -51,8 +51,8 @@ void blitdofast_a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bl int i,j; uae_u32 totald = 0; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -81,8 +81,8 @@ void blitdofast_desc_a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, stru uae_u32 totald = 0; int i,j; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -112,8 +112,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -150,8 +150,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -187,8 +187,8 @@ void blitdofast_30 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -221,8 +221,8 @@ void blitdofast_desc_30 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -256,8 +256,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -294,8 +294,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -331,8 +331,8 @@ void blitdofast_3c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -365,8 +365,8 @@ void blitdofast_desc_3c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -400,8 +400,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -438,8 +438,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -476,8 +476,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -514,8 +514,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -552,8 +552,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -590,8 +590,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -628,8 +628,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -666,8 +666,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -704,8 +704,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -742,8 +742,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -780,8 +780,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -818,8 +818,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -855,8 +855,8 @@ void blitdofast_aa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -879,8 +879,8 @@ void blitdofast_desc_aa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -904,8 +904,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -942,8 +942,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -980,8 +980,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1018,8 +1018,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1055,8 +1055,8 @@ void blitdofast_cc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1083,8 +1083,8 @@ void blitdofast_desc_cc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1112,8 +1112,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1150,8 +1150,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1188,8 +1188,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1226,8 +1226,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1264,8 +1264,8 @@ int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1302,8 +1302,8 @@ uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1338,8 +1338,8 @@ void blitdofast_f0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b { int i,j; uae_u32 totald = 0; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1364,8 +1364,8 @@ void blitdofast_desc_f0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str { uae_u32 totald = 0; int i,j; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1391,8 +1391,8 @@ void blitdofast_fa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1421,8 +1421,8 @@ void blitdofast_desc_fa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcc = b->bltcdat; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1451,8 +1451,8 @@ void blitdofast_fc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct b int i,j; uae_u32 totald = 0; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = bltcon0 >> 12; -uae_u16 bshift = bltcon1 >> 12; +uae_u16 ashift = blt_info.bltcon0 >> 12; +uae_u16 bshift = blt_info.bltcon1 >> 12; uae_u32 dstd=0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { @@ -1485,8 +1485,8 @@ void blitdofast_desc_fc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, str uae_u32 totald = 0; int i,j; uae_u32 srcb = b->bltbhold; -uae_u16 ashift = 16 - (bltcon0 >> 12); -uae_u16 bshift = 16 - (bltcon1 >> 12); +uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); +uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); uae_u32 dstd = 0; uaecptr dstp = 0; for (j = 0; j < b->vblitsize; j++) { diff --git a/blitter.cpp b/blitter.cpp index 77289ebd..58154ed3 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -4,7 +4,7 @@ * Custom chip emulation * * (c) 1995 Bernd Schmidt, Alessandro Bissacco -* (c) 2002 - 2021 Toni Wilen +* (c) 2002 - 2024 Toni Wilen */ #define SPEEDUP 1 @@ -24,6 +24,12 @@ #include "savestate.h" #include "debug.h" +#define BLIT_TRACE 0 +#if BLIT_TRACE +static uae_u32 *bdp; +static uae_u32 blit_tracer[2 * 10000000]; +#endif + // 1 = logging // 2 = no wait detection // 4 = no D @@ -37,6 +43,8 @@ int log_blitter = 1 | 16; int log_blitter = 0; #endif +extern uae_u8 agnus_hpos; + #define BLTCHA 0x800 #define BLTCHB 0x400 #define BLTCHC 0x200 @@ -65,21 +73,22 @@ int log_blitter = 0; #define BLITTER_PIPELINE_LASTD 0x1000 #define BLITTER_PIPELINE_FIRST 0x2000 #define BLITTER_PIPELINE_LAST 0x4000 +#define BLITTER_PIPELINE_CPU_FREE 0x8000 + +#define BLIT_NASTY_CPU_STEAL_CYCLE_COUNT 3 /* we must not change ce-mode while blitter is running.. */ static int blitter_cycle_exact, immediate_blits; static int blt_statefile_type; -uae_u16 bltcon0, bltcon1; -uae_u32 bltapt, bltbpt, bltcpt, bltdpt; -uae_u32 bltptx; -int bltptxpos, bltptxc; +static uae_u16 bltcon0_next, bltcon1_next; +bool blitter_delayed_update; static uae_u16 blineb; -static int blitline, blitfc, blitfill, blitife, blitdesc, blit_ovf; -static bool blitfill_idle; +static int blitline, blitfc, blitfill, blitife, blit_ovf, blitfill_old; +static int blitdesc_next, blitdesc; static int blitline_started, blitlineloop; -static int blitonedot, blitlinepixel; +static int blitonedot, blitlinepixel, blitlinepixel2; static int blit_add; static int blit_modadda, blit_modaddb, blit_modaddc, blit_modaddd; static int blit_ch; @@ -87,7 +96,8 @@ static bool shifter_skip_b, shifter_skip_y; static bool shifter_skip_b_old, shifter_skip_y_old; static uae_u16 bltcon0_old, bltcon1_old; static bool shifter[4], shifter_out; -static int shifter_first; +static bool shifter_d[4], shifter_d_armed; +static bool shifter_d_aga[3]; static bool blitline_c, blitfill_c; static int blitter_delayed_debug; @@ -113,14 +123,10 @@ static int blitter_vcounter; static evt_t blit_firstline_cycles; static evt_t blit_first_cycle; static int blit_last_cycle, blit_dmacount, blit_cyclecount; -static int blit_faulty; static int blt_delayed_irq; -static uae_u16 ddat; -static int ddatuse; +//static uae_u16 ddat; static int blit_dof; -static int last_blitter_hpos; - static uae_u16 debug_bltcon0, debug_bltcon1; static uae_u32 debug_bltapt, debug_bltbpt, debug_bltcpt, debug_bltdpt; static uae_u16 debug_bltamod, debug_bltbmod, debug_bltcmod, debug_bltdmod; @@ -133,7 +139,7 @@ static uae_u16 debug_bltadat, debug_bltbdat, debug_bltcdat; #define BLITTER_MAX_PIPELINED_CYCLES 4 #define CYCLECOUNT_FINISHED -1000 -#define CYCLECOUNT_START 3 +#define CYCLECOUNT_START 2 /* Blitter Idle Cycle: @@ -255,16 +261,16 @@ There is at least one demo that does this.. */ -void build_blitfilltable (void) +void build_blitfilltable(void) { - unsigned int d, fillmask; - int i; + uae_u32 fillmask; - for (i = 0; i < BLITTER_MAX_WORDS; i++) + for (int i = 0; i < BLITTER_MAX_WORDS; i++) { blit_masktable[i] = 0xFFFF; + } - for (d = 0; d < 256; d++) { - for (i = 0; i < 4; i++) { + for (int d = 0; d < 256; d++) { + for (int i = 0; i < 4; i++) { int fc = i & 1; uae_u8 data = d; for (fillmask = 1; fillmask != 0x100; fillmask <<= 1) { @@ -295,12 +301,12 @@ static void record_dma_blit_val(uae_u32 v) #endif } -static void record_dma_blit(uae_u16 reg, uae_u16 v, uae_u32 addr, int hpos) +static void record_dma_blit(uae_u16 reg, uae_u16 v, uae_u32 addr) { #ifdef DEBUGGER if (debug_dma && blitter_cycle_exact) { if (reg == 0) { - record_dma_write(reg, v, addr, hpos, vpos, DMARECORD_BLITTER, 3 + (blitline_c ? 0x20 : (blitfill_c ? 0x10 : 0))); + record_dma_write(reg, v, addr, DMARECORD_BLITTER, 3 + (blitline_c ? 0x20 : (blitfill_c ? 0x10 : 0))); } else { int r = 0; if (reg == 0x70) @@ -309,7 +315,7 @@ static void record_dma_blit(uae_u16 reg, uae_u16 v, uae_u32 addr, int hpos) r = 1; if (reg == 0x74) r = 0; - record_dma_read(reg, addr, hpos, vpos, DMARECORD_BLITTER, r + (blitline_c ? 0x20 : (blitfill_c ? 0x10 : 0))); + record_dma_read(reg, addr, DMARECORD_BLITTER, r + (blitline_c ? 0x20 : (blitfill_c ? 0x10 : 0))); } } if (memwatch_enabled) { @@ -319,13 +325,13 @@ static void record_dma_blit(uae_u16 reg, uae_u16 v, uae_u32 addr, int hpos) mask = MW_MASK_BLITTER_D_F; if (blitline_c) mask = MW_MASK_BLITTER_D_L; - debug_putpeekdma_chipram(addr, v, mask, reg, 0x054); + debug_putpeekdma_chipram(addr, v, mask, reg); } else if (reg == 0x70) { - debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_C, reg, 0x48); + debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_C, reg); } else if (reg == 0x72) { - debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_B, reg, 0x4c); + debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_B, reg); } else if (reg == 0x74) { - debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_A, reg, 0x52); + debug_getpeekdma_chipram(addr, MW_MASK_BLITTER_A, reg); } } #endif @@ -333,14 +339,14 @@ static void record_dma_blit(uae_u16 reg, uae_u16 v, uae_u32 addr, int hpos) static void blitter_debugsave(int copper, uaecptr pc) { - debug_bltcon0 = bltcon0; - debug_bltcon1 = bltcon1; + debug_bltcon0 = blt_info.bltcon0; + debug_bltcon1 = blt_info.bltcon1; debug_bltsizev = blt_info.vblitsize; debug_bltsizeh = blt_info.hblitsize; - debug_bltapt = bltapt; - debug_bltbpt = bltbpt; - debug_bltcpt = bltcpt; - debug_bltdpt = bltdpt; + debug_bltapt = blt_info.bltapt; + debug_bltbpt = blt_info.bltbpt; + debug_bltcpt = blt_info.bltcpt; + debug_bltdpt = blt_info.bltdpt; debug_bltadat = blt_info.bltadat; debug_bltbdat = blt_info.bltbdat; debug_bltcdat = blt_info.bltcdat; @@ -354,19 +360,19 @@ static void blitter_debugsave(int copper, uaecptr pc) debug_bltcop = copper; } -static void blitter_dump (void) +static void blitter_dump(void) { int chipsize = currprefs.chipmem.size; - console_out_f(_T("PT A=%08X B=%08X C=%08X D=%08X\n"), bltapt, bltbpt, bltcpt, bltdpt); + console_out_f(_T("PT A=%08X B=%08X C=%08X D=%08X\n"), blt_info.bltapt, blt_info.bltbpt, blt_info.bltcpt, blt_info.bltdpt); console_out_f(_T("CON0=%04X CON1=%04X DAT A=%04X B=%04X C=%04X\n"), - bltcon0, bltcon1, blt_info.bltadat, blt_info.bltbdat, blt_info.bltcdat); + blt_info.bltcon0, blt_info.bltcon1, blt_info.bltadat, blt_info.bltbdat, blt_info.bltcdat); console_out_f(_T("AFWM=%04X ALWM=%04X MOD A=%04X B=%04X C=%04X D=%04X\n"), blt_info.bltafwm, blt_info.bltalwm, blt_info.bltamod & 0xffff, blt_info.bltbmod & 0xffff, blt_info.bltcmod & 0xffff, blt_info.bltdmod & 0xffff); console_out_f(_T("PC=%08X DMA=%d\n"), m68k_getpc(), dmaen (DMA_BLITTER)); - if (((bltcon0 & BLTCHA) && bltapt >= chipsize) || ((bltcon0 & BLTCHB) && bltbpt >= chipsize) || - ((bltcon0 & BLTCHC) && bltcpt >= chipsize) || ((bltcon0 & BLTCHD) && bltdpt >= chipsize)) + if (((blt_info.bltcon0 & BLTCHA) && blt_info.bltapt >= chipsize) || ((blt_info.bltcon0 & BLTCHB) && blt_info.bltbpt >= chipsize) || + ((blt_info.bltcon0 & BLTCHC) && blt_info.bltcpt >= chipsize) || ((blt_info.bltcon0 & BLTCHD) && blt_info.bltdpt >= chipsize)) console_out_f(_T("PT outside of chipram\n")); } @@ -383,38 +389,23 @@ void blitter_debugdump(void) blitter_dump(); } -static void markidlecycle(int hpos) +static bool blit_pending(void) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_BLITSTARTFINISH, hpos, vpos); + if (shifter_d_armed || shifter[0] || shifter[1] || shifter[2] || shifter[3] || + shifter_d[0] || shifter_d[1] || shifter_d[2] || shifter_d[3] || + shifter_d_aga[0] || shifter_d_aga[1] || shifter_d_aga[2]) { + return true; } -#endif + return false; } -static void check_channel_mods(int hpos, int ch, uaecptr *pt) +static void markidlecycle(void) { - static int blit_warned = 100; - - if (bltptxpos < 0) - return; - if (bltptxpos != hpos) - return; - // if CPU write and non-CE: skip - if (bltptxc < 0) { - if (currprefs.cpu_model >= 68020 || !currprefs.cpu_cycle_exact) { - bltptxpos = -1; - return; - } - } - if (ch == bltptxc || ch == -bltptxc) { - if (blit_warned > 0) { - write_log(_T("BLITTER: %08X -> %08X write to %cPT ignored! %08x\n"), bltptx, *pt, ch + 'A' - 1, m68k_getpc()); - blit_warned--; - } - bltptxpos = -1; - *pt = bltptx; +#ifdef DEBUGGER + if (debug_dma && blit_pending()) { + record_dma_event(DMA_EVENT_BLITSTARTFINISH); } +#endif } // blitter interrupt is set (and busy bit cleared) when @@ -431,62 +422,48 @@ static void check_channel_mods(int hpos, int ch, uaecptr *pt) static void blitter_interrupt(void) { +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_BLITIRQ); + } +#endif if (blt_info.blit_interrupt) { return; } blt_info.blit_interrupt = 1; INTREQ_INT(6, 3); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_BLITIRQ, current_hpos(), vpos); - } -#endif } static void blitter_end(void) { blt_info.blit_main = 0; - blt_info.blit_finald = 0; blt_info.blit_queued = 0; event2_remevent(ev2_blitter); unset_special(SPCFLAG_BLTNASTY); if (log_blitter & 1) { + + if (blt_info.vblitsize > 100) { + blitter_dump(); + } + write_log(_T("cycles %d, missed %d, total %d\n"), blit_totalcyclecounter, blit_misscyclecounter, blit_totalcyclecounter + blit_misscyclecounter); } - blt_info.blitter_dangerous_bpl = 0; } -static void blitter_done_all(int hpos) +static void blitter_done_all(bool all) { blt_info.blit_main = 0; - blt_info.blit_finald = 0; - if (m68k_interrupt_delay && hpos >= 0) { - blt_info.finishhpos = hpos; - } else { - blt_info.finishhpos = -1; - } + blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; + blt_info.finishcycle_dmacon = get_cycles(); + blt_info.finishcycle_copper = get_cycles() + 1 * CYCLE_UNIT; blitter_interrupt(); - blitter_done_notify(blitline); - if (!blt_info.blit_queued && !blt_info.blit_finald) { - blitter_end(); + if (all) { + blitter_done_notify(); } } -static void blitter_done_except_d(int hpos) -{ - blt_info.blit_main = 0; - if (m68k_interrupt_delay && hpos >= 0) { - blt_info.finishhpos = hpos; - } else { - blt_info.finishhpos = -1; - } - blitter_interrupt(); - blitter_done_notify(blitline); -} - - static void blit_chipmem_agnus_wput(uaecptr addr, uae_u32 w, uae_u32 typemask) { if (!(log_blitter & 4)) { @@ -494,39 +471,39 @@ static void blit_chipmem_agnus_wput(uaecptr addr, uae_u32 w, uae_u32 typemask) w = regs.chipset_latch_rw; } #ifdef DEBUGGER - debug_putpeekdma_chipram(addr, w, typemask, 0x000, 0x054); + debug_putpeekdma_chipram(addr, w, typemask, 0x000); #endif chipmem_wput_indirect(addr, w); regs.chipset_latch_rw = w; } } -static void blitter_dofast (void) +static void blitter_dofast(void) { int i,j; uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; - uae_u8 mt = bltcon0 & 0xFF; - uae_u16 ashift = bltcon0 >> 12; - uae_u16 bshift = bltcon1 >> 12; + uae_u8 mt = blt_info.bltcon0 & 0xFF; + uae_u16 ashift = blt_info.bltcon0 >> 12; + uae_u16 bshift = blt_info.bltcon1 >> 12; blit_masktable[0] = blt_info.bltafwm; blit_masktable[blt_info.hblitsize - 1] &= blt_info.bltalwm; - if (bltcon0 & BLTCHA) { - bltadatptr = bltapt; - bltapt += (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHA) { + bltadatptr = blt_info.bltapt; + blt_info.bltapt += (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHB) { - bltbdatptr = bltbpt; - bltbpt += (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHB) { + bltbdatptr = blt_info.bltbpt; + blt_info.bltbpt += (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHC) { - bltcdatptr = bltcpt; - bltcpt += (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHC) { + bltcdatptr = blt_info.bltcpt; + blt_info.bltcpt += (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHD) { - bltddatptr = bltdpt; - bltdpt += (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHD) { + bltddatptr = blt_info.bltdpt; + blt_info.bltdpt += (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } #if SPEEDUP @@ -536,13 +513,13 @@ static void blitter_dofast (void) #endif { uae_u32 blitbhold = blt_info.bltbhold; - int ashift = bltcon0 >> 12; - int bshift = bltcon1 >> 12; + int ashift = blt_info.bltcon0 >> 12; + int bshift = blt_info.bltcon1 >> 12; uaecptr dstp = 0; int dodst = 0; for (j = 0; j < blt_info.vblitsize; j++) { - blitfc = !!(bltcon1 & BLTFC); + blitfc = !!(blt_info.bltcon1 & BLTFC); for (i = 0; i < blt_info.hblitsize; i++) { uae_u32 bltadat, blitahold; if (bltadatptr) { @@ -568,7 +545,7 @@ static void blitter_dofast (void) } if (dodst) blit_chipmem_agnus_wput(dstp, blt_info.bltddat, MW_MASK_BLITTER_D_N); - blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; + blt_info.bltddat = blit_func(blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; if (blitfill) { uae_u16 d = blt_info.bltddat; int ifemode = blitife ? 2 : 0; @@ -603,32 +580,32 @@ static void blitter_dofast (void) blt_info.blit_main = 0; } -static void blitter_dofast_desc (void) +static void blitter_dofast_desc(void) { int i,j; uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; - uae_u8 mt = bltcon0 & 0xFF; - uae_u16 ashift = 16 - (bltcon0 >> 12); - uae_u16 bshift = 16 - (bltcon1 >> 12); + uae_u8 mt = blt_info.bltcon0 & 0xFF; + uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12); + uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12); blit_masktable[0] = blt_info.bltafwm; blit_masktable[blt_info.hblitsize - 1] &= blt_info.bltalwm; - if (bltcon0 & BLTCHA) { - bltadatptr = bltapt; - bltapt -= (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHA) { + bltadatptr = blt_info.bltapt; + blt_info.bltapt -= (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHB) { - bltbdatptr = bltbpt; - bltbpt -= (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHB) { + bltbdatptr = blt_info.bltbpt; + blt_info.bltbpt -= (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHC) { - bltcdatptr = bltcpt; - bltcpt -= (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHC) { + bltcdatptr = blt_info.bltcpt; + blt_info.bltcpt -= (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; } - if (bltcon0 & BLTCHD) { - bltddatptr = bltdpt; - bltdpt -= (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; + if (blt_info.bltcon0 & BLTCHD) { + bltddatptr = blt_info.bltdpt; + blt_info.bltdpt -= (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } #if SPEEDUP if (blitfunc_dofast_desc[mt] && !blitfill) { @@ -641,7 +618,7 @@ static void blitter_dofast_desc (void) int dodst = 0; for (j = 0; j < blt_info.vblitsize; j++) { - blitfc = !!(bltcon1 & BLTFC); + blitfc = !!(blt_info.bltcon1 & BLTFC); for (i = 0; i < blt_info.hblitsize; i++) { uae_u32 bltadat, blitahold; if (bltadatptr) { @@ -667,7 +644,7 @@ static void blitter_dofast_desc (void) } if (dodst) blit_chipmem_agnus_wput(dstp, blt_info.bltddat, MW_MASK_BLITTER_D_N); - blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; + blt_info.bltddat = blit_func(blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; if (blitfill) { uae_u16 d = blt_info.bltddat; int ifemode = blitife ? 2 : 0; @@ -704,21 +681,21 @@ static void blitter_dofast_desc (void) static void blitter_line_read_b(void) { - if (bltcon0 & BLTCHB) { + if (blt_info.bltcon0 & BLTCHB) { // B (normally not enabled) - record_dma_blit(0x72, 0, bltbpt, last_blitter_hpos); - blt_info.bltbdat = chipmem_wget_indirect(bltbpt); + record_dma_blit(0x72, 0, blt_info.bltbpt); + blt_info.bltbdat = chipmem_wget_indirect(blt_info.bltbpt); regs.chipset_latch_rw = blt_info.bltbdat; record_dma_blit_val(blt_info.bltbdat); - bltbpt += blt_info.bltbmod; + blt_info.bltbpt += blt_info.bltbmod; } } static void blitter_line_read_c(void) { - if (bltcon0 & BLTCHC) { + if (blt_info.bltcon0 & BLTCHC) { // C - record_dma_blit(0x70, 0, bltcpt, last_blitter_hpos); - blt_info.bltcdat = chipmem_wget_indirect(bltcpt); + record_dma_blit(0x70, 0, blt_info.bltcpt); + blt_info.bltcdat = chipmem_wget_indirect(blt_info.bltcpt); regs.chipset_latch_rw = blt_info.bltcdat; record_dma_blit_val(blt_info.bltcdat); } @@ -727,119 +704,98 @@ static void blitter_line_read_c(void) static void blitter_line_write(void) { /* D-channel state has no effect on linedraw, but C must be enabled or nothing is drawn! */ - if (bltcon0 & BLTCHC) { - blit_chipmem_agnus_wput(bltdpt, blt_info.bltddat, MW_MASK_BLITTER_D_L); - } -} - -static void blitter_line_minterm(uae_u16 dat) -{ - uae_u16 mask = blt_info.bltafwm; - if (dat & BLITTER_PIPELINE_LAST) { - mask &= blt_info.bltalwm; - } - - int ashift = bltcon0 >> 12; - uae_u16 blitahold = (blt_info.bltadat & mask) >> ashift; - - if (bltcon0 & BLTCHB) { - // B special case if enabled - int bshift = bltcon1 >> 12; - blineb = (((uae_u32)blt_info.bltbold << 16) | blt_info.bltbdat) >> bshift; - } - blt_info.bltbhold = (blineb & 0x0001) ? 0xFFFF : 0; - blt_info.bltddat = blit_func(blitahold, blt_info.bltbhold, blt_info.bltcdat, bltcon0 & 0xFF); - - if (blt_info.bltddat) { - blt_info.blitzero = 0; + if (blt_info.bltcon0 & BLTCHC) { + blit_chipmem_agnus_wput(blt_info.bltdpt, blt_info.bltddat, MW_MASK_BLITTER_D_L); } } static void blitter_line_minterm_extra(void) { - int ashift = bltcon0 >> 12; + int ashift = blt_info.bltcon0 >> 12; // never first or last, no masking needed. uae_u16 blitahold = blt_info.bltadat >> ashift; - blt_info.bltddat = blit_func(blitahold, blt_info.bltbhold, blt_info.bltcdat, bltcon0 & 0xFF); + blt_info.bltahold2 = blitahold; + blt_info.bltbhold2 = blt_info.bltbhold; + blt_info.bltchold2 = blt_info.bltcdat; } static void blitter_line_adat(void) { - int ashift = bltcon0 >> 12; + int ashift = blt_info.bltcon0 >> 12; blt_info.bltaold = (((uae_u32)blt_info.bltaold << 16) | (blt_info.bltadat & blt_info.bltafwm)) >> ashift; } static void blitter_line_proc_apt(void) { - if (bltcon0 & BLTCHA) { - bool sign = (bltcon1 & BLTSIGN) != 0; + if (blt_info.bltcon0 & BLTCHA) { + bool sign = (blt_info.bltcon1 & BLTSIGN) != 0; if (sign) - bltapt += (uae_s16)blt_info.bltbmod; + blt_info.bltapt += (uae_s16)blt_info.bltbmod; else - bltapt += (uae_s16)blt_info.bltamod; + blt_info.bltapt += (uae_s16)blt_info.bltamod; } } static void blitter_line_ovf(void) { - uae_u16 ashift = bltcon0 >> 12; + uae_u16 ashift = blt_info.bltcon0 >> 12; ashift += blit_ovf; ashift &= 15; - bltcon0 &= 0x0fff; - bltcon0 |= ashift << 12; + blt_info.bltcon0 &= 0x0fff; + blt_info.bltcon0 |= ashift << 12; blit_ovf = 0; } static void blitter_line_incx(void) { - uae_u16 ashift = bltcon0 >> 12; + uae_u16 ashift = blt_info.bltcon0 >> 12; if (ashift == 15) { - bltcpt += 2; + blt_info.bltcpt += 2; } blit_ovf = 1; } static void blitter_line_decx(void) { - uae_u16 ashift = bltcon0 >> 12; + uae_u16 ashift = blt_info.bltcon0 >> 12; if (ashift == 0) { - bltcpt -= 2; + blt_info.bltcpt -= 2; } blit_ovf = -1; } static void blitter_line_decy(void) { - if (bltcon0 & BLTCHC) { - bltcpt -= blt_info.bltcmod; + if (blt_info.bltcon0 & BLTCHC) { + blt_info.bltcpt -= blt_info.bltcmod; blitonedot = 0; } } static void blitter_line_incy(void) { - if (bltcon0 & BLTCHC) { - bltcpt += blt_info.bltcmod; + if (blt_info.bltcon0 & BLTCHC) { + blt_info.bltcpt += blt_info.bltcmod; blitonedot = 0; } } static void blitter_line_proc_cpt_y(void) { - bool sign = (bltcon1 & BLTSIGN) != 0; + bool sign = (blt_info.bltcon1 & BLTSIGN) != 0; if (!sign) { - if (bltcon1 & BLTSUD) { - if (bltcon1 & BLTSUL) + if (blt_info.bltcon1 & BLTSUD) { + if (blt_info.bltcon1 & BLTSUL) blitter_line_decy(); else blitter_line_incy(); } } - if (!(bltcon1 & BLTSUD)) { - if (bltcon1 & BLTAUL) + if (!(blt_info.bltcon1 & BLTSUD)) { + if (blt_info.bltcon1 & BLTAUL) blitter_line_decy(); else blitter_line_incy(); @@ -848,18 +804,18 @@ static void blitter_line_proc_cpt_y(void) static void blitter_line_proc_cpt_x(void) { - bool sign = (bltcon1 & BLTSIGN) != 0; + bool sign = (blt_info.bltcon1 & BLTSIGN) != 0; if (!sign) { - if (!(bltcon1 & BLTSUD)) { - if (bltcon1 & BLTSUL) + if (!(blt_info.bltcon1 & BLTSUD)) { + if (blt_info.bltcon1 & BLTSUL) blitter_line_decx(); else blitter_line_incx(); } } - if (bltcon1 & BLTSUD) { - if (bltcon1 & BLTAUL) + if (blt_info.bltcon1 & BLTSUD) { + if (blt_info.bltcon1 & BLTAUL) blitter_line_decx(); else blitter_line_incx(); @@ -868,35 +824,107 @@ static void blitter_line_proc_cpt_x(void) static void blitter_line_proc_status(void) { - blitlinepixel = !(bltcon1 & BLTSING) || ((bltcon1 & BLTSING) && !blitonedot); + blitlinepixel = !(blt_info.bltcon1 & BLTSING) || ((blt_info.bltcon1 & BLTSING) && !blitonedot); blitonedot = 1; } static void blitter_line_sign(void) { - bool blitsign = (uae_s16)bltapt < 0; + bool blitsign = (uae_s16)blt_info.bltapt < 0; if (blitsign) { - bltcon1 |= BLTSIGN; + blt_info.bltcon1 |= BLTSIGN; } else { - bltcon1 &= ~BLTSIGN; + blt_info.bltcon1 &= ~BLTSIGN; } } static void blitter_nxline(void) { - int bshift = bltcon1 >> 12; + int bshift = blt_info.bltcon1 >> 12; bshift--; bshift &= 15; blineb = (blt_info.bltbdat >> bshift) | (blt_info.bltbdat << (16 - bshift)); - bltcon1 &= 0x0fff; - bltcon1 |= bshift << 12; + blt_info.bltcon1 &= 0x0fff; + blt_info.bltcon1 |= bshift << 12; + +} + +static void blitter_line_minterm(uae_u16 dat) +{ + uae_u16 mask = blt_info.bltafwm; + if (dat & BLITTER_PIPELINE_LAST) { + mask &= blt_info.bltalwm; + } + + int ashift = blt_info.bltcon0 >> 12; + uae_u16 blitahold = (blt_info.bltadat & mask) >> ashift; + + if (blt_info.bltcon0 & BLTCHB) { + // B special case if enabled + int bshift = blt_info.bltcon1 >> 12; + blineb = (((uae_u32)blt_info.bltbold << 16) | blt_info.bltbdat) >> bshift; + } + blt_info.bltbhold = (blineb & 0x0001) ? 0xFFFF : 0; + blt_info.bltahold2 = blitahold; + blt_info.bltbhold2 = blt_info.bltbhold; + blt_info.bltchold2 = blt_info.bltcdat; } -static void actually_do_blit (void) + +static void blitter_loadadat(uae_u16 dat) +{ + uae_u32 blitahold; + uae_u16 ashift = blt_info.bltcon0 >> 12; + uae_u16 bltadat = blt_info.bltadat; + if (dat & BLITTER_PIPELINE_FIRST) { + bltadat &= blt_info.bltafwm; + } + if (dat & BLITTER_PIPELINE_LAST) { + bltadat &= blt_info.bltalwm; + } + if (blitdesc) { + blitahold = (((uae_u32)bltadat << 16) | blt_info.bltaold) >> (16 - ashift); + } else { + blitahold = (((uae_u32)blt_info.bltaold << 16) | bltadat) >> ashift; + } + blt_info.bltaold = bltadat; + blt_info.bltahold2 = blitahold; +} + +static void blitter_loadblit(uae_u16 dat) +{ + blitter_loadadat(dat); + blt_info.bltbhold2 = blt_info.bltbhold; +} + +static void blitter_doblit_last(void) +{ + uae_u8 mt = blt_info.bltcon0 & 0xFF; + + uae_u16 ddat = blit_func(blt_info.bltahold2, blt_info.bltbhold2, blt_info.bltchold2, mt) & 0xFFFF; + + if (blitfill) { + uae_u16 d = ddat; + int ifemode = blitife ? 2 : 0; + int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; + ddat = (blit_filltable[d & 255][ifemode + blitfc][0] + + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); + blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; + } + + if (ddat) { + blt_info.blitzero = 0; + } + + blt_info.bltddat = ddat; +} + +// immediate blit +static void actually_do_blit(void) { if (blitline) { do { @@ -906,15 +934,17 @@ static void actually_do_blit (void) blitter_line_read_b(); blitter_line_read_c(); blitter_line_minterm(BLITTER_PIPELINE_FIRST); + blitter_doblit_last(); blitter_line_proc_cpt_x(); } if (blt_info.hblitsize > 2) { - if (blitlineloop && !(bltcon1 & BLTSUD)) { + if (blitlineloop && !(blt_info.bltcon1 & BLTSUD)) { blitter_line_proc_cpt_y(); blitlineloop = 0; } blitter_line_read_c(); blitter_line_minterm_extra(); + blitter_doblit_last(); } blitter_line_adat(); blitter_line_ovf(); @@ -930,8 +960,9 @@ static void actually_do_blit (void) blitter_line_write(); blitlinepixel = 0; } - bltdpt = bltcpt; + blt_info.bltdpt = blt_info.bltcpt; blitter_line_minterm(BLITTER_PIPELINE_FIRST | BLITTER_PIPELINE_LAST); + blitter_doblit_last(); blitlineloop = 1; blt_info.vblitsize--; } while (blt_info.vblitsize != 0); @@ -944,14 +975,14 @@ static void actually_do_blit (void) blt_info.blit_main = 0; } -static void blitter_doit (int hpos) +static void blitter_doit(void) { if (blt_info.vblitsize == 0) { - blitter_done_all(hpos); + blitter_done_all(true); return; } actually_do_blit(); - blitter_done_all(hpos); + blitter_done_all(true); } static int makebliteventtime(int delay) @@ -986,7 +1017,7 @@ void blitter_handler(uae_u32 data) blit_slowdown = -1; return; } - blitter_doit(-1); + blitter_doit(); } #ifdef CPUEMU_13 @@ -1015,17 +1046,26 @@ static void blit_bltset(int con) bool blit_changed = false; uae_u16 con0_old = bltcon0_old; + if (bltcon0_next != blt_info.bltcon0) { + blitter_delayed_update = true; + } + bltcon0_next = blt_info.bltcon0; + if (bltcon1_next != blt_info.bltcon1) { + blitter_delayed_update = true; + } + bltcon1_next = blt_info.bltcon1; + blt_info.blt_change_cycles = get_cycles() + CYCLE_UNIT; + if (con & 2) { - blitdesc = bltcon1 & BLTDESC; - if (!savestate_state && blit_warned > 0) { - if ((bltcon1 & BLTLINE) && !blitline_started) { + if (!savestate_state && blt_info.blit_main && blit_warned > 0) { + if ((blt_info.bltcon1 & BLTLINE) && !blitline_started) { write_log(_T("BLITTER: linedraw enabled when blitter is active! %08x\n"), M68K_GETPC); blit_warned--; #ifdef DEBUGGER if (log_blitter & 16) activate_debugger(); #endif - } else if (!(bltcon1 & BLTLINE) && blitline_started) { + } else if (!(blt_info.bltcon1 & BLTLINE) && blitline_started) { write_log(_T("BLITTER: linedraw disabled when blitter is active! %08x\n"), M68K_GETPC); blit_warned--; #ifdef DEBUGGER @@ -1033,14 +1073,14 @@ static void blit_bltset(int con) activate_debugger(); #endif } - if ((bltcon1 & BLTFILL) && !(bltcon1_old & BLTFILL)) { + if ((blt_info.bltcon1 & BLTFILL) && !(bltcon1_old & BLTFILL)) { write_log(_T("BLITTER: fill enabled when blitter is active! %08x\n"), M68K_GETPC); blit_warned--; #ifdef DEBUGGER if (log_blitter & 16) activate_debugger(); #endif - } else if (!(bltcon1 & BLTFILL) && (bltcon1_old & BLTFILL)) { + } else if (!(blt_info.bltcon1 & BLTFILL) && (bltcon1_old & BLTFILL)) { write_log(_T("BLITTER: fill disabled when blitter is active! %08x\n"), M68K_GETPC); blit_warned--; #ifdef DEBUGGER @@ -1051,36 +1091,41 @@ static void blit_bltset(int con) } } - if (!savestate_state && blt_info.blit_main && (bltcon0_old != bltcon0 || bltcon1_old != bltcon1)) { - blit_changed = true; - if (blit_warned > 0) { - write_log(_T("BLITTER: BLTCON0 %04x -> %04x BLTCON1 %04x -> %04x PC=%08x (%d %d)\n"), bltcon0_old, bltcon0, bltcon1_old, bltcon1, M68K_GETPC, current_hpos(), vpos); - //blitter_dump(); - blitshifterdebug(bltcon0_old, false); - blit_warned--; - if (log_blitter & 16) - activate_debugger(); + if (!savestate_state && blt_info.blit_main) { + if ((bltcon0_old & 0x0f00) != (blt_info.bltcon0 & 0x0f00) || + (bltcon1_old & 1) != (blt_info.bltcon1 & 1) || + ((bltcon1_old & 1) && (bltcon1_old & 0x7f) != (blt_info.bltcon1 & 0x7f)) || + (!(bltcon1_old & 1) && (bltcon1_old & (4 | 8 | 16)) != (blt_info.bltcon1 & (4 | 8 | 16)))) { + blit_changed = true; + if (blit_warned > 0) { + write_log(_T("BLITTER: BLTCON0 %04x -> %04x BLTCON1 %04x -> %04x PC=%08x (%d %d)\n"), + bltcon0_old, blt_info.bltcon0, bltcon1_old, blt_info.bltcon1, M68K_GETPC, current_hpos(), vpos); + //blitter_dump(); + blitshifterdebug(bltcon0_old, false); + blit_warned--; + if (log_blitter & 16) + activate_debugger(); + } } - bltcon0_old = bltcon0; - bltcon1_old = bltcon1; } + bltcon0_old = blt_info.bltcon0; + bltcon1_old = blt_info.bltcon1; - blit_ch = (bltcon0 & 0x0f00) >> 8; - blitline = bltcon1 & BLTLINE; - blit_ovf = (bltcon1 & BLTOVF) != 0; + blit_ch = (blt_info.bltcon0 & (BLTCHD | BLTCHC | BLTCHB | BLTCHA)) >> 8; + blitline = blt_info.bltcon1 & BLTLINE; + blit_ovf = (blt_info.bltcon1 & BLTOVF) != 0; - blitfill_idle = false; - shifter_skip_b = (bltcon0 & BLTCHB) == 0; + shifter_skip_b = (blt_info.bltcon0 & BLTCHB) == 0; if (blitline) { shifter_skip_y = true; blitfill = 0; shifter_out = shifter_skip_y ? shifter[2] : shifter[3]; + shifter_d_armed = false; } else { - int oldfill = blitfill; - blitfill = (bltcon1 & BLTFILL) != 0; - blitfc = !!(bltcon1 & BLTFC); - blitife = !!(bltcon1 & BLTIFE); - if ((bltcon1 & BLTFILL) == BLTFILL) { + blitfill = (blt_info.bltcon1 & BLTFILL) != 0; + blitfc = !!(blt_info.bltcon1 & BLTFC); + blitife = !!(blt_info.bltcon1 & BLTIFE); + if ((blt_info.bltcon1 & BLTFILL) == BLTFILL) { #ifdef DEBUGGER debugtest(DEBUGTEST_BLITTER, _T("weird fill mode\n")); #endif @@ -1095,28 +1140,28 @@ static void blit_bltset(int con) #endif } - shifter_skip_y = (bltcon0 & (BLTCHD | BLTCHC)) != 0x300; + shifter_skip_y = (blt_info.bltcon0 & (BLTCHD | BLTCHC)) != (BLTCHD | BLTCHC); // fill mode idle cycle needed? (D enabled but C not enabled) - if (blitfill && (bltcon0 & (BLTCHD | BLTCHC)) == 0x100) { + if (blitfill && (blt_info.bltcon0 & (BLTCHD | BLTCHC)) == BLTCHD) { shifter_skip_y = false; - blitfill_idle = true; } shifter_out = shifter_skip_y ? shifter[2] : shifter[3]; } blit_cyclecount = 4 - (shifter_skip_b + shifter_skip_y); - blit_dmacount = ((bltcon0 & BLTCHA) ? 1 : 0) + ((bltcon0 & BLTCHB) ? 1 : 0) + - ((bltcon0 & BLTCHC) ? 1 : 0) + (((bltcon0 & BLTCHD) && !blitline) ? 1 : 0); + blit_dmacount = ((blt_info.bltcon0 & BLTCHA) ? 1 : 0) + ((blt_info.bltcon0 & BLTCHB) ? 1 : 0) + + ((blt_info.bltcon0 & BLTCHC) ? 1 : 0) + (((blt_info.bltcon0 & BLTCHD) && !blitline) ? 1 : 0); if (blt_info.blit_main || blt_info.blit_pending) { blitfill_c = blitfill; blitline_c = blitline; } + if (!(blt_info.bltcon0 & BLTCHD)) { + shifter_d_armed = false; + } - blit_dof = 0; - if ((bltcon1 & BLTDOFF) && ecs_agnus) { - blit_dof = 1; + if ((bltcon1_next & BLTDOFF) && ecs_agnus) { #ifdef DEBUGGER debugtest(DEBUGTEST_BLITTER, _T("ECS BLTCON1 DOFF-bit set\n")); if (log_blitter & 16) @@ -1125,136 +1170,119 @@ static void blit_bltset(int con) } if (blit_changed && blit_warned > 0 && !savestate_state) { - blitshifterdebug(bltcon0, false); + blitshifterdebug(blt_info.bltcon0, false); } } static int get_current_channel(void) { - if (blit_cyclecounter < 0) { - return 0; - } - if (blitline) { + int nreg = 0x1fe; + bool lastw = blitter_hcounter + 1 == blt_info.hblitsize; if (shifter[0]) { // A or idle - if (blitter_hcounter + 1 == blt_info.hblitsize) + if (lastw) { return 5; - if (bltcon0 & BLTCHA) - return 1; - return 0; + } + if (blt_info.bltcon0 & BLTCHA) { + nreg &= 0x74; // A + } } // B - if (shifter[1] && (bltcon0 & BLTCHB)) { - return 2; - } - // C or D - if (shifter[2]) { - // enabled C - if (bltcon0 & BLTCHC) { - if (blitter_hcounter + 1 == blt_info.hblitsize) - return 4; - return 3; + if (shifter[1] && (blt_info.bltcon0 & BLTCHB)) { + nreg &= 0x72; // B + } + // C + if (shifter[2] && (blt_info.bltcon0 & BLTCHC) && !lastw) { + nreg &= 0x70; // C + } + + if (nreg == 0x70) { + return 3; // C + } + if (nreg == 0x72) { + return 2; // B + } + if (nreg == 0x74) { + return 1; // A + } + if (nreg != 0x1fe) { + return 0; + } + + // D (C in line mode) + if (shifter[2] && lastw) { + if (blt_info.bltcon0 & BLTCHC) { + // enabled C->D + if (!shifter[0]) { + /* onedot mode and no pixel = bus write access is skipped */ + if (blitlinepixel2) { + return 4; + } + return 6; + } } else { // disabled C - if (blitter_hcounter + 1 == blt_info.hblitsize) - return 6; + return 6; } } + } else { - // order is important when multiple bits in shift register - // A (if not also D) - if (shifter[0] && (bltcon0 & BLTCHA) && !shifter[3]) { - return 1; + + int nreg = 0x1fe; + if (shifter[0] && (blt_info.bltcon0 & BLTCHA)) { + nreg &= 0x74; // A } - // C - if (shifter[2] && (bltcon0 & BLTCHC)) { - return 3; + if (shifter[1] && (blt_info.bltcon0 & BLTCHB)) { + nreg &= 0x72; // B } - // Shift stage 4 active, C enabled and other stage(s) also active: - // normally would be D but becomes C. - if (shifter[3] && (bltcon0 & BLTCHC) && (shifter[0] || shifter[1])) { - return 3; + if (shifter[2] && (blt_info.bltcon0 & BLTCHC)) { + nreg &= 0x70; // C } - // B - if (shifter[1] && (bltcon0 & BLTCHB)) { - return 2; + if (nreg == 0x70) { + return 3; // C } - // D is disabled if position A is non-zero, even if A is disabled. - if (shifter[0]) { - return 0; + if (nreg == 0x72) { + return 2; // B + } + if (nreg == 0x74) { + return 1; // A } - if (shifter_first >= 0) { + if (nreg != 0x1fe) { return 0; } - // D only if A, B and C is not currently active - if (ddatuse) { - // idle fill cycle: 3 = D, 4 = idle - if (blitfill_idle) { - // if stage 4: idle - if (shifter[3]) { - return 0; - } - // if stage 3: D - if (shifter[2] && (bltcon0 & BLTCHD)) { - return 4; - } - } else { - // if stage 3 and C disabled and D enabled: D - if (shifter[2] && !(bltcon0 & BLTCHC) && (bltcon0 & BLTCHD)) { - return 4; - } - // if stage 4 and C enabled and D enabled: D - if (shifter[3] && (bltcon0 & BLTCHC) && (bltcon0 & BLTCHD)) { - return 4; - } - } + if (shifter_d_armed && !shifter[0] && (blt_info.bltcon0 & BLTCHD)) { + return 4; // D } + } return 0; } -static uae_u16 blitter_doblit(uae_u16 dat) +// latches/shifters that run every CCK +static void blitter_next_cycle_always(void) { - uae_u32 blitahold; - uae_u16 bltadat, ddat; - uae_u8 mt = bltcon0 & 0xFF; - uae_u16 ashift = bltcon0 >> 12; - - bltadat = blt_info.bltadat; - if (dat & BLITTER_PIPELINE_FIRST) { - bltadat &= blt_info.bltafwm; - } - if (dat & BLITTER_PIPELINE_LAST) { - bltadat &= blt_info.bltalwm; - } - if (blitdesc) { - blitahold = (((uae_u32)bltadat << 16) | blt_info.bltaold) >> (16 - ashift); - } else { - blitahold = (((uae_u32)blt_info.bltaold << 16) | bltadat) >> ashift; - } - blt_info.bltaold = bltadat; - - ddat = blit_func (blitahold, blt_info.bltbhold, blt_info.bltcdat, mt) & 0xFFFF; - - if (blitfill) { - uae_u16 d = ddat; - int ifemode = blitife ? 2 : 0; - int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; - ddat = (blit_filltable[d & 255][ifemode + blitfc][0] - + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); - blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; + if (shifter_d[2]) { + if (!blitline && (blt_info.bltcon0 & BLTCHD)) { + shifter_d_armed = true; + } } + shifter_d[2] = shifter_d[0] && !shifter_d[1]; + shifter_d[1] = shifter_d[0]; - if (ddat) { - blt_info.blitzero = 0; + if (aga_mode) { + // AGA 2 CCK delay busy fix + shifter_d_aga[2] = shifter_d_aga[1]; + shifter_d_aga[1] = shifter_d_aga[0]; + shifter_d_aga[0] = false; + if (shifter_d_aga[2] && blt_info.blit_count_done) { + blitter_done_all(false); + } } - - return ddat; } -static int blitter_next_cycle(void) +static int blitter_next_cycle(bool injectbit) { bool tmp[4]; bool out = false; @@ -1267,6 +1295,7 @@ static int blitter_next_cycle(void) if (shifter_skip_b_old && !shifter_skip_b) { // if B skip was disabled: A goes to B tmp[1] = tmp[0]; + //activate_debugger(); shifter_skip_b_old = shifter_skip_b; blitchanged = true; } else if (!shifter_skip_b_old && shifter_skip_b) { @@ -1290,62 +1319,62 @@ static int blitter_next_cycle(void) blitchanged = true; } + shifter_d[0] = shifter_out; if (shifter_out) { dodat = true; - if (!blitline) { - if (bltcon0 & BLTCHD) { - ddatuse = true; - } - } - blitter_hcounter++; - if (blitter_hcounter >= blt_info.hblitsize) { - blitter_hcounter = 0; - blitter_vcounter++; - if (blitter_vcounter >= blt_info.vblitsize) { + if (blt_info.blit_count_done) { + // if there is still bit in shifter and counter has already finished: next bit is routed back to shifter A. + if (blt_info.blit_count_done > 1) { shifter_out = false; - blit_cyclecounter = CYCLECOUNT_FINISHED; - if (!blitline) { - // do we need final D write? - if (ddatuse && (bltcon0 & BLTCHD)) { - if (blt_info.blit_finald) { - write_log(_T("blit finald already set!?\n")); - } - blt_info.blit_finald = 1 + 2; - blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; + shifter[0] = false; + } + blt_info.blit_count_done++; + } else { + if (blit_cyclecounter >= 0) { + blitter_hcounter++; + if (blitter_hcounter >= blt_info.hblitsize) { + blitter_hcounter = 0; + blitter_vcounter++; + if (blitter_vcounter >= blt_info.vblitsize) { + blit_cyclecounter = CYCLECOUNT_FINISHED; + blt_info.blit_count_done = 1; + shifter_out = false; } } + shifter[0] = shifter_out; } } - shifter[0] = shifter_out; } - if (shifter_first > 0) { - shifter_first = -1; + // counters finished + //if (blt_info.blit_count_done & 1) { + // shifter[0] = false; + //} + + if (injectbit) { shifter[0] = true; - blitfc = !!(bltcon1 & BLTFC); + blitfc = !!(blt_info.bltcon1 & BLTFC); + } + + if (shifter_skip_b) { + shifter[2] = tmp[0]; } else { - if (shifter_skip_b) { - shifter[2] = tmp[0]; - } else { - shifter[1] = tmp[0]; - shifter[2] = tmp[1]; - } - if (shifter_skip_y) { - out = shifter[2]; - } else { - shifter[3] = tmp[2]; - out = shifter[3]; - } + shifter[1] = tmp[0]; + shifter[2] = tmp[1]; + } + if (shifter_skip_y) { + out = shifter[2]; + } else { + shifter[3] = tmp[2]; + out = shifter[3]; } shifter_out = out; - if (blit_cyclecounter > 0 && blitchanged) { + if (blit_cyclecounter > 0 && blitchanged && blt_info.blit_main) { static int blit_warned = 100; if (blit_warned > 0) { - if (blitshifterdebug(bltcon0, true)) { - blit_faulty = 1; - } + blitshifterdebug(blt_info.bltcon0, true); blit_warned--; } } @@ -1353,109 +1382,106 @@ static int blitter_next_cycle(void) } -static void blitter_doddma_new(int hpos, bool addmod) +static void blitter_doddma_new(struct rgabuf *rga, bool addmod) { - uaecptr *hpt = NULL; - bool skip = false; + uaecptr pt = rga->pv; + record_dma_blit(rga->reg, blt_info.bltddat, pt); + blit_chipmem_agnus_wput(pt, blt_info.bltddat, MW_MASK_BLITTER_D_N); + regs.chipset_latch_rw = blt_info.bltddat; - check_channel_mods(hpos, 4, &bltdpt); - bltdpt |= alloc_cycle_blitter_conflict_or(hpos, 4, &skip); - // alloc_cycle_blitter() can change modulo, old modulo is used during this cycle. - int mod = blit_modaddd; - if (!skip) { - record_dma_blit(0x00, ddat, bltdpt, hpos); - blit_chipmem_agnus_wput(bltdpt, ddat, MW_MASK_BLITTER_D_N); +#if BLIT_TRACE == 2 + uae_u32 v1 = (4 << 16) | blt_info.bltddat; + uae_u32 v2 = pt; + if (bdp[0] != v1 || bdp[1] != v2) { + write_log("MISMATCH!\n"); + activate_debugger(); } - bool skipadd = alloc_cycle_blitter(hpos, &bltdpt, 4, addmod ? mod : 0); + bdp += 2; +#endif +#if BLIT_TRACE == 1 + *bdp++ = (4 << 16) | blt_info.bltddat; + *bdp++ = pt; +#endif +} - if (!blitline && !skipadd) { - bltdpt += blit_add; - } - if (addmod) { - bltdpt += mod; - } +void blitter_loadcdat(uae_u16 v) +{ + blt_info.bltchold2 = blt_info.bltcdat; } -static void blitter_dodma_new(int ch, int hpos, bool addmod) +void blitter_loadbdat(uae_u16 v) { - uae_u16 dat; - uae_u32 *addr; - bool skipadd = false; - int mod; - bool skip = false; + int shift = blt_info.bltcon1 >> 12; + if (blitdesc) { + blt_info.bltbhold = (((uae_u32)v << 16) | blt_info.bltbold) >> (16 - shift); + } else { + blt_info.bltbhold = (((uae_u32)blt_info.bltbold << 16) | v) >> shift; + } + blt_info.bltbold = v; +} - uaecptr orptr = alloc_cycle_blitter_conflict_or(hpos, ch, &skip); +static void blitter_dodma_new(struct rgabuf *rga, int ch, bool addmod) +{ + uae_u16 dat = 0; + uaecptr pt = rga->pv; switch (ch) { case 1: // A { - bltapt |= orptr; - check_channel_mods(hpos, 1, &bltapt); - if (!skip) { - uae_u16 reg = 0x74; - record_dma_blit(reg, 0, bltapt, hpos); - blt_info.bltadat = dat = chipmem_wget_indirect(bltapt); - record_dma_blit_val(dat); - regs.chipset_latch_rw = blt_info.bltadat; - } - addr = &bltapt; - mod = blit_modadda; - skipadd = alloc_cycle_blitter(hpos, &bltapt, 1, addmod ? mod : 0); + uae_u16 reg = 0x74; + record_dma_blit(rga->reg, 0, pt); + blt_info.bltadat = dat = chipmem_wget_indirect(pt); + record_dma_blit_val(dat); + regs.chipset_latch_rw = blt_info.bltadat; break; } case 2: // B { - int bshift = bltcon1 >> 12; - bltbpt |= orptr; - check_channel_mods(hpos, 2, &bltbpt); - if (!skip) { - uae_u16 reg = 0x72; - record_dma_blit(reg, 0, bltbpt, hpos); - blt_info.bltbdat = dat = chipmem_wget_indirect(bltbpt); - record_dma_blit_val(dat); - regs.chipset_latch_rw = blt_info.bltbdat; - } - addr = &bltbpt; - mod = blit_modaddb; - if (blitdesc) - blt_info.bltbhold = (((uae_u32)blt_info.bltbdat << 16) | blt_info.bltbold) >> (16 - bshift); - else - blt_info.bltbhold = (((uae_u32)blt_info.bltbold << 16) | blt_info.bltbdat) >> bshift; + int bshift = blt_info.bltcon1 >> 12; + uae_u16 reg = 0x72; + record_dma_blit(rga->reg, 0, pt); + blt_info.bltbdat = dat = chipmem_wget_indirect(pt); + record_dma_blit_val(dat); + regs.chipset_latch_rw = blt_info.bltbdat; + blitter_loadbdat(dat); blineb = blt_info.bltbhold; - blt_info.bltbold = blt_info.bltbdat; - skipadd = alloc_cycle_blitter(hpos, &bltbpt, 2, addmod ? mod : 0); break; } case 3: // C { - bltcpt |= orptr; - check_channel_mods(hpos, 3, &bltcpt); - if (!skip) { - uae_u16 reg = 0x70; - record_dma_blit(reg, 0, bltcpt, hpos); - blt_info.bltcdat = dat = chipmem_wget_indirect(bltcpt); - record_dma_blit_val(dat); - regs.chipset_latch_rw = blt_info.bltcdat; - } - addr = &bltcpt; - mod = blit_modaddc; - skipadd = alloc_cycle_blitter(hpos, &bltcpt, 3, addmod ? mod : 0); + uae_u16 reg = 0x70; + record_dma_blit(rga->reg, 0, pt); + blt_info.bltcdat = dat = chipmem_wget_indirect(pt); + record_dma_blit_val(dat); + regs.chipset_latch_rw = blt_info.bltcdat; + blt_info.bltchold2 = blt_info.bltcdat; break; } default: abort(); } - if (!blitline && !skipadd) { - (*addr) += blit_add; + regs.chipset_latch_rw = dat; +#if BLIT_TRACE == 2 + if (ch == 1 || ch == 2 || ch == 3) { + uae_u32 v1 = (ch << 16) | dat; + uae_u32 v2 = pt; + if (bdp[0] != v1 || bdp[1] != v2) { + write_log("MISMATCH!\n"); + activate_debugger(); + } + bdp += 2; } - if (addmod) { - (*addr) += mod; +#endif +#if BLIT_TRACE == 1 + if (ch == 1 || ch == 2 || ch == 3) { + *bdp++ = (4 << 16) | dat; + *bdp++ = pt; } +#endif } - static bool blitter_idle_cycle_register_write(uaecptr addr, uae_u32 v) { addrbank *ab = &get_mem_bank(addr); @@ -1466,402 +1492,438 @@ static bool blitter_idle_cycle_register_write(uaecptr addr, uae_u32 v) v = regs.chipset_latch_rw; } if (addr == 0x40) { - bltcon0 = v; + blt_info.bltcon0 = v; blit_bltset(1); return true; } else if (addr == 0x42) { - bltcon1 = v; + blt_info.bltcon1 = v; blit_bltset(2); return true; } return false; } -static bool decide_blitter_idle(int lasthpos, int hpos, uaecptr addr, uae_u32 value) +static bool decide_blitter_idle(uaecptr addr, uae_u32 value) { - markidlecycle(last_blitter_hpos); - if (addr != 0xffffffff && lasthpos + 1 == hpos) { + markidlecycle(); + if (addr != 0xffffffff) { shifter_skip_b_old = shifter_skip_b; shifter_skip_y_old = shifter_skip_y; + blitfill_old = blitfill; return blitter_idle_cycle_register_write(addr, value); } return false; } -uae_u16 blitter_pipe[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; +static void calc_mods(void) +{ + blit_modadda = blt_info.bltamod; + blit_modaddb = blt_info.bltbmod; + blit_modaddc = blt_info.bltcmod; + blit_modaddd = blt_info.bltdmod; + if (blitdesc) { + blit_modadda = -blit_modadda; + blit_modaddb = -blit_modaddb; + blit_modaddc = -blit_modaddc; + blit_modaddd = -blit_modaddd; + } + blit_add = blitdesc ? -2 : 2; +} -void set_blitter_last(int hp) +static void maybe_load_mods(void) { - last_blitter_hpos = hp; + if (blitter_delayed_update) { + evt_t c = get_cycles(); + if (c == blt_info.blt_mod_cycles[0]) { + blt_info.bltamod = blt_info.bltamod_next; + blt_info.blt_mod_cycles[0] = 0; + } + if (c == blt_info.blt_mod_cycles[1]) { + blt_info.bltbmod = blt_info.bltbmod_next; + blt_info.blt_mod_cycles[1] = 0; + } + if (c == blt_info.blt_mod_cycles[2]) { + blt_info.bltcmod = blt_info.bltcmod_next; + blt_info.blt_mod_cycles[2] = 0; + } + if (c == blt_info.blt_mod_cycles[3]) { + blt_info.bltdmod = blt_info.bltdmod_next; + blt_info.blt_mod_cycles[3] = 0; + } + if (c == blt_info.blt_change_cycles) { + blitter_doblit_last(); + } + blitdesc = bltcon1_next & BLTDESC; + blit_dof = ecs_agnus && (bltcon1_next & BLTDOFF); + + calc_mods(); + if (!blt_info.blt_mod_cycles[0] && !blt_info.blt_mod_cycles[1] && !blt_info.blt_mod_cycles[2] && !blt_info.blt_mod_cycles[3]) { + blitter_delayed_update = false; + } + } } -static bool decide_blitter_maybe_write2(int until_hpos, uaecptr addr, uae_u32 value) +void process_blitter(struct rgabuf *rga) { + int hpos = agnus_hpos; + uae_u32 dat = rga->bltdat; + + int c = dat & 7; + bool line = (dat & BLITTER_PIPELINE_LINE) != 0; + + bool addmod = (dat & BLITTER_PIPELINE_ADDMOD) != 0; bool written = false; - int hsync = until_hpos < 0; + uaecptr addr = 0xffffffff; + uae_u32 value = 0; + int added = 0; - if (scandoubled_line) { - return 0; - } + blit_totalcyclecounter++; - if (hsync && blt_delayed_irq) { - if (blt_delayed_irq > 0) - blt_delayed_irq--; - if (blt_delayed_irq <= 0) { - blt_delayed_irq = 0; - INTREQ_INT(6, 3); - } - } + if (c == 0) { - if (until_hpos < 0 || until_hpos > maxhposm0) { - until_hpos = maxhposm0; - } + written = decide_blitter_idle(addr, value); - if (last_blitter_hpos >= until_hpos) { - goto end; - } + } else if (c == 1 && line) { // line 1/4 (A, free) - if (immediate_blits) { - if (!blt_info.blit_main) { - return false; + written = decide_blitter_idle(addr, value); + if (dat & BLITTER_PIPELINE_FIRST) { + blitter_line_proc_status(); + blitter_line_proc_apt(); } - if (dmaen(DMA_BLITTER)) { - blitter_doit(last_blitter_hpos); + + } else if (c == 3 && line) { // line 2/4 (C) + + if (!(dat & BLITTER_PIPELINE_FIRST) && blitlineloop && !(blt_info.bltcon1 & BLTSUD)) { + blitter_line_proc_cpt_y(); + blitlineloop = 0; + } + bool skip = rga->conflict; + record_dma_blit(rga->reg, 0, blt_info.bltcpt); + if (!skip) { + blt_info.bltcdat = chipmem_wget_indirect(blt_info.bltcpt); + regs.chipset_latch_rw = blt_info.bltcdat; + record_dma_blit_val(blt_info.bltcdat); } - goto end2; - } - if (log_blitter && blitter_delayed_debug) { - blitter_delayed_debug = 0; - blitter_dump(); - } + if (dat & BLITTER_PIPELINE_FIRST) { + blitter_line_minterm(dat); + blitter_doblit_last(); + blitter_line_proc_cpt_x(); + } else { + // W>2 special case + blitter_line_minterm_extra(); + blitter_doblit_last(); + } - if (!blitter_cycle_exact) { - goto end2; - } + } else if (c == 5 && line) { // line 3/4 (free) - while (last_blitter_hpos < until_hpos) { - int hpos = last_blitter_hpos; + written = decide_blitter_idle(addr, value); - // dma transfers and processing - for (;;) { - if (!cycle_line_slot[hpos] && blt_info.blit_queued > 0) { - blt_info.blit_queued--; - if (!blt_info.blit_queued && !blt_info.blit_finald) { - blitter_end(); - } - } - uae_u16 dat = blitter_pipe[hpos]; - if (dat) { - blitter_pipe[hpos] = 0; + // this needs to be done before D channel transfer + // because onedot state needs to be known 1 CCK in advance + // so that blitter/cpu cycle allocation works correctly. + blitter_line_adat(); + blitter_line_ovf(); + if (blt_info.hblitsize == 1) { + blitter_line_proc_status(); + } else { + if (blitlineloop) { + blitter_line_proc_cpt_y(); + blitlineloop = 0; } - if (!(dat & CYCLE_PIPE_BLITTER)) { - break; + } + blitter_line_sign(); + blitter_nxline(); + + blt_info.bltddatl = blt_info.bltddat; + blt_info.bltdptl = blt_info.bltdpt; + blitlinepixel2 = blitlinepixel; + + blitlinepixel = 0; + blitlineloop = 1; + + blt_info.bltdpt = blt_info.bltcpt; + + blitter_line_minterm(dat); + blitter_doblit_last(); + + } else if ((c == 4 || c == 6) && line) { // line 4/4 (C/D) + + if (c == 4) { + bool skip = rga->conflict; + record_dma_blit(rga->reg, blt_info.bltddatl, blt_info.bltdptl); + if (!skip) { + blit_chipmem_agnus_wput(blt_info.bltdptl, blt_info.bltddatl, MW_MASK_BLITTER_D_L); + regs.chipset_latch_rw = blt_info.bltddatl; } - cycle_line_pipe[hpos] = 0; - if (dat & CYCLE_PIPE_CPUSTEAL) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_CPUBLITTERSTOLEN, hpos, vpos); - } -#endif - break; + // copper conflict: after blitter dma transfer, + // copy new copper pointer to conflicting blitter address pointer. + if (rga->conflict) { + rga->p = rga->conflict; + *rga->p = rga->conflictaddr; + rga->pv = rga->conflictaddr; } + } else { + markidlecycle(); + } - int c = dat & 7; - bool line = (dat & BLITTER_PIPELINE_LINE) != 0; + } else { + + // normal mode channels + if (c == 4) { + blitter_doddma_new(rga, addmod); - // last D write? if (dat & BLITTER_PIPELINE_LASTD) { - line = false; #ifdef DEBUGGER if (debug_dma) { - record_dma_event(DMA_EVENT_BLITFINALD, hpos, vpos); + record_dma_event(DMA_EVENT_BLITFINALD); } #endif - if (cycle_line_slot[hpos]) { - write_log("Blitter cycle allocated by %d!?\n", cycle_line_slot[hpos]); - } - if (!blt_info.blit_main && !blt_info.blit_finald && !blt_info.blit_queued) { - blitter_end(); - } - //activate_debugger(); } - // finished? - if (dat & BLITTER_PIPELINE_FINISHED) { - if (line) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_BLITFINALD, hpos, vpos); - //activate_debugger(); - } -#endif - } + } else { + if (c == 5) { + c = 1; } + blitter_dodma_new(rga, c, addmod); + } - bool addmod = (dat & BLITTER_PIPELINE_ADDMOD) != 0; - - blit_totalcyclecounter++; - - if (c == 0) { + uaecptr pt = rga->pv; + if (!blitline) { + pt += rga->bltadd; + } + if (addmod) { + pt += rga->bltmod; + } + *rga->p = pt; + + // copper conflict: after blitter dma transfer, + // copy new copper pointer to conflicting blitter address pointer OR used modulo (if any) + if (rga->conflict) { + rga->p = rga->conflict; + *rga->p = rga->conflictaddr | rga->bltmod; + rga->pv = rga->conflictaddr | rga->bltmod; + } - written = decide_blitter_idle(hpos, until_hpos, addr, value); + } - } else if (c == 1 && line) { // line 1/4 (A, free) +#ifdef DEBUGGER + if (debug_dma && c && addmod) { + record_dma_event(DMA_EVENT_MODADD); + } +#endif - written = decide_blitter_idle(hpos, until_hpos, addr, value); - if (dat & BLITTER_PIPELINE_FIRST) { - blitter_line_proc_status(); - blitter_line_proc_apt(); - } + if ((dat & BLITTER_PIPELINE_BLIT) && !blitline) { + blitter_loadblit(dat); + blitter_doblit_last(); + } - } else if (c == 3 && line) { // line 2/4 (C) + if (dat & BLITTER_PIPELINE_PROCESS) { + blitfc = !!(blt_info.bltcon1 & BLTFC); + } +} - if (!(dat & BLITTER_PIPELINE_FIRST) && blitlineloop && !(bltcon1 & BLTSUD)) { - blitter_line_proc_cpt_y(); - blitlineloop = 0; - } - bool skip = false; - uaecptr orptr = alloc_cycle_blitter_conflict_or(hpos, 3, &skip); - record_dma_blit(0x70, 0, bltcpt | orptr, hpos); - check_channel_mods(hpos, 3, &bltcpt); - if (!skip) { - blt_info.bltcdat = chipmem_wget_indirect(bltcpt | orptr); - regs.chipset_latch_rw = blt_info.bltcdat; - record_dma_blit_val(blt_info.bltcdat); - } - alloc_cycle_blitter(hpos, &bltcpt, 3, 0); - - if (dat & BLITTER_PIPELINE_FIRST) { - blitter_line_minterm(dat); - blitter_line_proc_cpt_x(); - } else { - // W>2 special case - blitter_line_minterm_extra(); - } +void generate_blitter(void) +{ + if (!blitter_cycle_exact) { + return; + } - } else if (c == 5 && line) { // line 3/4 (free) + if (get_cycles() == blt_info.finishcycle_copper) { + blitter_done_notify(); + } - written = decide_blitter_idle(hpos, until_hpos, addr, value); + blitter_next_cycle_always(); - } else if ((c == 4 || c == 6) && line) { // line 4/4 (C/D) + bool ena = blitter_cant_access() == 0; + bool alloc = check_rga_free_slot_in() == false; + bool pri = (dmacon & DMA_BLITPRI) != 0; + bool bstreq = blt_info.nasty_cnt >= BLIT_NASTY_CPU_STEAL_CYCLE_COUNT && !pri; - blitter_line_adat(); - blitter_line_ovf(); - if (blt_info.hblitsize == 1) { - blitter_line_proc_status(); - } else { - if (blitlineloop) { - blitter_line_proc_cpt_y(); - blitlineloop = 0; - } - } - blitter_line_sign(); - blitter_nxline(); - - /* onedot mode and no pixel = bus write access is skipped */ - if (blitlinepixel && c == 4) { - bool skip = false; - uaecptr orptr = alloc_cycle_blitter_conflict_or(hpos, 4, &skip); - record_dma_blit(0x00, blt_info.bltddat, bltdpt | orptr, hpos); - check_channel_mods(hpos, 4, &bltdpt); - if (!skip) { - blit_chipmem_agnus_wput(bltdpt | orptr, blt_info.bltddat, MW_MASK_BLITTER_D_L); - } - alloc_cycle_blitter(hpos, &bltdpt, 4, 0); - } else { - markidlecycle(hpos); - } - blitlinepixel = 0; - blitlineloop = 1; + // fully idle? + if (!shifter_d_armed && blt_info.blit_count_done && !shifter[0] && !shifter[1] && !shifter[2] && !shifter[3] && + !shifter_d[0] && !shifter_d[1] && !shifter_d[2] && !shifter_d[3] && + !shifter_d_aga[0] && !shifter_d_aga[1] && !shifter_d_aga[2]) { + if (blt_info.blit_queued == 1) { + blitter_end(); + goto end; + } + } - bltdpt = bltcpt; + if (!blt_info.blit_count_done) { + blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; + } - blitter_line_minterm(dat); +#if 0 + // Skip BLTSIZE write cycle + if (blit_waitcyclecounter) { + blit_waitcyclecounter = 0; + goto end; + } +#endif - } else { + if (blt_info.blit_queued) { - // normal mode channels - if (c == 4) { - blitter_doddma_new(hpos, addmod); - } else { - if (c == 5) { - c = 1; - } - blitter_dodma_new(c, hpos, addmod); + // CPU steals the cycle if CPU has waited long enough and current cyle is not free. + if (!ena || alloc || bstreq) { + blit_misscyclecounter++; + if (ena && !alloc && bstreq) { +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_CPUBLITTERSTOLEN); + //activate_debugger(); } +#endif } + // reset any pending delayed modulo changes + blt_info.bltamod = blt_info.bltamod_next; + blt_info.bltbmod = blt_info.bltbmod_next; + blt_info.bltcmod = blt_info.bltcmod_next; + blt_info.bltdmod = blt_info.bltdmod_next; + calc_mods(); + goto end; + } - if ((dat & BLITTER_PIPELINE_BLIT) && !blitline) { - ddat = blitter_doblit(dat); - blt_info.bltddat = ddat; - } + int c = get_current_channel(); - if (dat & BLITTER_PIPELINE_PROCESS) { - blitfc = !!(bltcon1 & BLTFC); + blt_info.blit_queued--; + if (!blt_info.blit_count_done) { + blit_cyclecounter++; + if (blit_cyclecounter == (-CYCLECOUNT_START) + 1) { + shifter_d_armed = false; + blt_info.blitzero = 1; + blt_info.got_cycle = 1; } - break; } - if (blt_info.blit_finald || blt_info.blit_main) { - - blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; - - // cycle allocations - for (;;) { - - // final D idle cycle - // does not need free bus - if (blt_info.blit_finald > 1) { - blt_info.blit_finald--; - } + bool addmod = false; + int reg = 0x1fe; + int mod = 0; + uaecptr *p = NULL; + bool idlecycle = false; + + if (c == 1) { + reg = 0x74; + p = &blt_info.bltapt; + mod = blit_modadda; + } else if (c == 2) { + reg = 0x72; + p = &blt_info.bltbpt; + mod = blit_modaddb; + } else if (c == 3) { + reg = 0x70; + p = &blt_info.bltcpt; + mod = blit_modaddc; + } else if (c == 4) { + reg = 0x00; + p = &blt_info.bltdpt; + mod = blit_modaddd; + shifter_d_armed = false; + } - // Skip BLTSIZE write cycle - if (blit_waitcyclecounter) { - blit_waitcyclecounter = 0; + // restore copper BLTxPTx write in same cycle + if (c >= 1 && c <= 4) { + evt_t cycs = get_cycles(); + if (cycs == blt_info.blt_ch_cycles[c - 1]) { + blt_info.blt_ch_cycles[c - 1] = 0; + switch (c) + { + case 1: + blt_info.bltapt = blt_info.bltapt_prev; break; - } - - bool cant = blitter_cant_access(hpos); - if (cant) { - blit_misscyclecounter++; + case 2: + blt_info.bltbpt = blt_info.bltbpt_prev; break; - } - - // CPU steals the cycle if CPU has waited long enough and current cyle is not free. - if (!(dmacon & DMA_BLITPRI) && blt_info.nasty_cnt >= BLIT_NASTY_CPU_STEAL_CYCLE_COUNT && currprefs.cpu_memory_cycle_exact && ((cycle_line_slot[hpos] & CYCLE_MASK) != 0 || bitplane_dma_access(hpos, 0) != 0)) { - int offset = get_rga_pipeline(hpos, RGA_PIPELINE_OFFSET_BLITTER); - blitter_pipe[offset] = CYCLE_PIPE_BLITTER | CYCLE_PIPE_CPUSTEAL; - cycle_line_pipe[offset] = CYCLE_PIPE_BLITTER | CYCLE_PIPE_CPUSTEAL; - blt_info.nasty_cnt = -1; + case 3: + blt_info.bltcpt = blt_info.bltcpt_prev; break; - } - - if (blt_info.blit_finald == 1) { - // final D write. Only if BLTCON D and line mode is off. - if ((bltcon0 & BLTCHD) && !(bltcon1 & BLTLINE)) { - int offset = get_rga_pipeline(hpos, RGA_PIPELINE_OFFSET_BLITTER); - cycle_line_pipe[offset] = CYCLE_PIPE_BLITTER; - blitter_pipe[offset] = CYCLE_PIPE_BLITTER | 4 | BLITTER_PIPELINE_ADDMOD | BLITTER_PIPELINE_LASTD; - } - if (currprefs.chipset_mask & CSMASK_AGA) { - blitter_done_all(hpos); - } - blt_info.blit_finald = 0; - if (!blt_info.blit_queued) { - blitter_end(); - } + case 4: + blt_info.bltdpt = blt_info.bltdpt_prev; break; } + } + } - if (blt_info.blit_main) { - blit_cyclecounter++; - if (blit_cyclecounter == 0) { - shifter_first = 1; - // clear possible still pending final D write - blt_info.blit_finald = 0; - blitter_next_cycle(); - } - int c = get_current_channel(); - blt_info.got_cycle = 1; - - bool addmod = false; - if (c == 1 || c == 2 || c == 3) { - if (blitter_hcounter + 1 == blt_info.hblitsize) { - addmod = true; - } - } else if (c == 4) { - if (blitter_hcounter == 0) { - addmod = true; - } - } + uae_u32 v = CYCLE_PIPE_BLITTER; - uae_u16 v = CYCLE_PIPE_BLITTER | c | (addmod ? BLITTER_PIPELINE_ADDMOD : 0); + if (c == 1 || c == 2 || c == 3) { + if (blitter_hcounter + 1 == blt_info.hblitsize) { + addmod = true; + } + } else if (c == 4) { + if (blitter_hcounter == 0) { + addmod = true; + } + if (blt_info.blit_count_done) { + v |= BLITTER_PIPELINE_LASTD; + } + } - if (blitter_hcounter == 0) { - v |= BLITTER_PIPELINE_FIRST; - } - if (blitter_hcounter == blt_info.hblitsize - 1) { - v |= BLITTER_PIPELINE_LAST; - } - if (blitline) { - v |= BLITTER_PIPELINE_LINE; - } + v |= c | (addmod ? BLITTER_PIPELINE_ADDMOD : 0); - bool doddat = false; - if (blit_cyclecounter >= 0) { - doddat = blitter_next_cycle(); - } + if (blitter_hcounter == 0) { + v |= BLITTER_PIPELINE_FIRST; + } + if (blitter_hcounter == blt_info.hblitsize - 1) { + v |= BLITTER_PIPELINE_LAST; + } + if (blitline) { + v |= BLITTER_PIPELINE_LINE; - int offset = get_rga_pipeline(hpos, RGA_PIPELINE_OFFSET_BLITTER); - if (cycle_line_pipe[offset]) { - write_log("Blitter cycle conflict %d\n", cycle_line_pipe[offset]); - } + if (c == 1) { + idlecycle = true; + } + if (c == 5) { + idlecycle = true; + } + } - if (doddat) { - v |= BLITTER_PIPELINE_BLIT; - if (blitter_hcounter == 0) { - v |= BLITTER_PIPELINE_PROCESS; - } - } + bool doddat = false; + bool wasdone = blt_info.blit_count_done; - // finished? - if (blit_cyclecounter < -CYCLECOUNT_START) { - v |= BLITTER_PIPELINE_FINISHED; - if (!blt_info.blit_main) { - write_log(_T("blitter blit_main already cleared!?\n")); - } - // has final D write? - if (blt_info.blit_finald) { - if (!(currprefs.chipset_mask & CSMASK_AGA)) { - blitter_done_except_d(hpos); - } - } else { - blitter_done_all(hpos); - } - } + doddat = blitter_next_cycle(blit_cyclecounter == 0); - cycle_line_pipe[offset] = CYCLE_PIPE_BLITTER; - blitter_pipe[offset] = v; - } - break; + if (doddat) { + v |= BLITTER_PIPELINE_BLIT; + if (blitter_hcounter == 0) { + v |= BLITTER_PIPELINE_PROCESS; + } + } + // finished? + if (!wasdone && blt_info.blit_count_done) { + v |= BLITTER_PIPELINE_FINISHED; + if (!blt_info.blit_main) { + write_log(_T("blitter blit_main already cleared!?\n")); + } + if (blitline || !(blt_info.bltcon0 & BLTCHD) || !aga_mode) { + blitter_done_all(false); + } else { + // AGA and blit has final D write: delay busy clear by 2 CCKs + shifter_d_aga[0] = true; } - } - last_blitter_hpos++; - bltptxpos = -1; - } -end2: - bltptxpos = -1; -end: - if (hsync) { - last_blitter_hpos = 0; - } - - return written; -} + if (reg == 0x1fe) { + idlecycle = true; + } -bool decide_blitter_maybe_write(int until_hpos, uaecptr addr, uae_u32 value) -{ - int reg = addr & 0x1fe; - // early exit check - if (reg != 0x40 && reg != 0x42) { - addr = 0xffffffff; - } else { - return decide_blitter_maybe_write2(until_hpos, addr, value); + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_BLITTER, reg, p); + rga->bltdat = v; + rga->bltmod = mod; + rga->bltadd = blit_add; + if (idlecycle) { + rga->alloc = -1; + } } - return decide_blitter_maybe_write2(until_hpos, addr, value); +end:; + maybe_load_mods(); } void decide_blitter(int until_hpos) { - decide_blitter_maybe_write2(until_hpos, 0xffffffff, 0xffffffff); } - #else void decide_blitter (int hpos) { } #endif @@ -1869,53 +1931,44 @@ void decide_blitter (int hpos) { } static void blitter_force_finish(bool state) { uae_u16 odmacon; - if (!blt_info.blit_main && !blt_info.blit_finald) + if (!blt_info.blit_main) { return; + } /* blitter is currently running * force finish (no blitter state support yet) */ odmacon = dmacon; dmacon |= DMA_MASTER | DMA_BLITTER; - if (state) + if (state) { write_log(_T("forcing blitter finish\n")); + } if (blitter_cycle_exact && !immediate_blits) { int rounds = 10000; - while ((blt_info.blit_main || blt_info.blit_finald) && rounds > 0) { - memset(cycle_line_slot, 0, sizeof(cycle_line_slot)); + while ((blt_info.blit_main) && rounds > 0) { decide_blitter(-1); rounds--; } - if (rounds == 0) + if (rounds == 0) { write_log(_T("blitter froze!?\n")); + } } else { actually_do_blit(); } - blitter_done_all(-1); + blitter_done_all(true); dmacon = odmacon; } -static void blit_modset (void) -{ - int mult; - - blit_add = blitdesc ? -2 : 2; - mult = blitdesc ? -1 : 1; - blit_modadda = mult * blt_info.bltamod; - blit_modaddb = mult * blt_info.bltbmod; - blit_modaddc = mult * blt_info.bltcmod; - blit_modaddd = mult * blt_info.bltdmod; -} - -void reset_blit (int bltcon) +void reset_blit(int bltcon) { - if (!blt_info.blit_main && !blt_info.blit_finald) + if (!blt_info.blit_queued) { return; - if (bltcon) - blit_bltset (bltcon); - blit_modset(); + } + if (bltcon) { + blit_bltset(bltcon); + } } -static bool waitingblits (void) +static bool waitingblits(void) { static int warned = 10; @@ -1931,7 +1984,7 @@ static bool waitingblits (void) bool waited = false; int waiting = 0; int vpos_prev = vpos; - while ((blt_info.blit_main || blt_info.blit_finald) && dmaen (DMA_BLITTER)) { + while ((blt_info.blit_main) && dmaen(DMA_BLITTER)) { waited = true; x_do_cycles (8 * CYCLE_UNIT); if (vpos_prev != vpos) { @@ -1947,31 +2000,40 @@ static bool waitingblits (void) } if (warned && waited) { warned--; - write_log (_T("waiting_blits detected PC=%08x\n"), M68K_GETPC); + write_log(_T("waiting_blits detected PC=%08x\n"), M68K_GETPC); } - if (!blt_info.blit_main && !blt_info.blit_finald) + if (!blt_info.blit_main) { return true; + } return false; } -static void blitter_start_init (void) +static void blitter_start_init(void) { - shifter_first = 0; +#if 0 + if (blt_info.blit_main) { + write_log("Blitter start but blitter active"); + } + if (blt_info.blit_finald) { + write_log("Blitter start but final D still pending"); + } +#endif + blt_info.blit_queued = 0; - blit_faulty = 0; - blt_info.blitzero = 1; - blitline_started = bltcon1 & BLTLINE; + blitline_started = blt_info.bltcon1 & BLTLINE; blitlineloop = 1; + blt_info.finishcycle_dmacon = 0; + blt_info.finishcycle_copper = 0; blit_bltset(1 | 2); - blit_modset(); - ddatuse = 0; + blitter_delayed_update = true; + maybe_load_mods(); blt_info.blit_interrupt = 0; blt_info.bltaold = 0; blt_info.bltbold = 0; - int bshift = bltcon1 >> 12; + int bshift = blt_info.bltcon1 >> 12; blineb = (blt_info.bltbdat >> bshift) | (blt_info.bltbdat << (16 - bshift)); blitonedot = 0; blitlinepixel = 0; @@ -1983,22 +2045,21 @@ static void blitter_start_init (void) } } -void do_blitter(int hpos, int copper, uaecptr pc) +void do_blitter(int copper, uaecptr pc) { int cycles; + //activate_debugger(); + if ((log_blitter & 2)) { if (blt_info.blit_main) { write_log (_T("blitter was already active! PC=%08x\n"), M68K_GETPC); } } - bltcon0_old = bltcon0; - bltcon1_old = bltcon1; + bltcon0_old = blt_info.bltcon0; + bltcon1_old = blt_info.bltcon1; - if (blitter_cycle_exact != (currprefs.blitter_cycle_exact ? 1 : 0)) { - memset(blitter_pipe, 0, sizeof(blitter_pipe)); - } blitter_cycle_exact = currprefs.blitter_cycle_exact; immediate_blits = currprefs.immediate_blits; blt_info.got_cycle = 0; @@ -2009,6 +2070,7 @@ void do_blitter(int hpos, int copper, uaecptr pc) blit_cyclecounter = 0; blit_totalcyclecounter = 0; blt_info.blit_pending = 1; + blt_info.blit_count_done = 0; blitter_start_init(); @@ -2058,12 +2120,12 @@ void do_blitter(int hpos, int copper, uaecptr pc) blit_maxcyclecounter = 0x7fffffff; blit_waitcyclecounter = 0; - last_blitter_hpos = hpos; if (blitter_cycle_exact) { if (immediate_blits) { + blt_info.blitzero = 1; if (dmaen(DMA_BLITTER)) { - blitter_doit(-1); + blitter_doit(); } return; } @@ -2082,20 +2144,21 @@ void do_blitter(int hpos, int copper, uaecptr pc) return; } + blt_info.blitzero = 1; if (blt_info.vblitsize == 0) { if (dmaen(DMA_BLITTER)) { - blitter_done_all(-1); + blitter_done_all(true); } return; } - if (dmaen (DMA_BLITTER)) { + if (dmaen(DMA_BLITTER)) { blt_info.got_cycle = 1; } if (immediate_blits) { if (dmaen(DMA_BLITTER)) { - blitter_doit(-1); + blitter_doit(); } return; } @@ -2111,24 +2174,36 @@ void blitter_check_start (void) blt_info.blit_main = 1; blitter_start_init(); if (immediate_blits) { - blitter_doit(-1); + blitter_doit(); } } } -void maybe_blit (int hpos, int hack) +void maybe_blit(int hack) { static int warned = 10; + if (blitter_cycle_exact) { +#if 0 + if (1) { + if (blt_info.blit_main || shifter_d_armed || shifter[0] || shifter[1] || shifter[2] || shifter[3] || + shifter_d[0] || shifter_d[1] || shifter_d[2] || shifter_d[3]) { + write_log("blitter register change while active!\n"); + activate_debugger(); + } + } +#endif + return; + } + if (!blt_info.blit_main) { - decide_blitter(hpos); return; } if (savestate_state) return; - if (dmaen (DMA_BLITTER) && (currprefs.cpu_model >= 68020 || !currprefs.cpu_memory_cycle_exact)) { + if (dmaen(DMA_BLITTER) && (currprefs.cpu_model >= 68020 || !currprefs.cpu_memory_cycle_exact)) { bool doit = false; if (currprefs.waiting_blits == 3) { // always doit = true; @@ -2163,12 +2238,12 @@ void maybe_blit (int hpos, int hack) } if (blitter_cycle_exact) { - decide_blitter(hpos); goto end; } - if (hack == 1 && get_cycles() < blit_firstline_cycles) + if (hack == 1 && get_cycles() < blit_firstline_cycles) { goto end; + } blitter_handler(0); end:; @@ -2176,34 +2251,22 @@ end:; blitter_delayed_debug = 1; } -void check_is_blit_dangerous (uaecptr *bplpt, int planes, int words) -{ - blt_info.blitter_dangerous_bpl = 0; - if ((!blt_info.blit_main && !blt_info.blit_finald) || !blitter_cycle_exact) - return; - // too simple but better than nothing - for (int i = 0; i < planes; i++) { - uaecptr bpl = bplpt[i]; - uaecptr dpt = bltdpt & chipmem_bank.mask; - if (dpt >= bpl - 2 * words && dpt < bpl + 2 * words) { - blt_info.blitter_dangerous_bpl = 1; - return; - } - } -} - -int blitnasty (void) +int blitnasty(void) { int cycles, ccnt; - if (!blt_info.blit_main) + + if (!blt_info.blit_main) { return -1; - if (!dmaen(DMA_BLITTER)) + } + if (!dmaen(DMA_BLITTER)) { return -1; + } if (blitter_cycle_exact) { return -1; } - if (blit_last_cycle >= blit_cyclecount && blit_dmacount == blit_cyclecount) + if (blit_last_cycle >= blit_cyclecount && blit_dmacount == blit_cyclecount) { return 0; + } cycles = int((get_cycles() - blit_first_cycle) / CYCLE_UNIT); ccnt = 0; while (blit_last_cycle + blit_cyclecount < cycles) { @@ -2214,13 +2277,14 @@ int blitnasty (void) } /* very approximate emulation of blitter slowdown caused by bitplane DMA */ -void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles) +void blitter_slowdown(int ddfstrt, int ddfstop, int totalcycles, int freecycles) { static int oddfstrt, oddfstop, ototal, ofree; static int slow; - if (!totalcycles || ddfstrt < 0 || ddfstop < 0) + if (!totalcycles || ddfstrt < 0 || ddfstop < 0) { return; + } if (ddfstrt != oddfstrt || ddfstop != oddfstop || totalcycles != ototal || ofree != freecycles) { int linecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * totalcycles; int freelinecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * freecycles; @@ -2233,37 +2297,66 @@ void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles if (dmacycles > freelinecycles) slow = dmacycles - freelinecycles; } - if (blit_slowdown < 0 || blitline) + if (blit_slowdown < 0 || blitline) { return; + } blit_slowdown += slow; blit_misscyclecounter += slow; } -void blitter_reset (void) +#if BLIT_TRACE == 1 +void blitter_save_trace(void) +{ + FILE *f = fopen("c:\\temp\\blitter_trace.bin", "wb"); + if (f) { + fwrite(blit_tracer, 1, bdp - blit_tracer, f); + fclose(f); + } +} +#endif + +void blitter_reset(void) { - bltptxpos = -1; + blt_info.blt_ch_cycles[0] = blt_info.blt_ch_cycles[1] = blt_info.blt_ch_cycles[2] = blt_info.blt_ch_cycles[3] = 0; + blt_info.blt_mod_cycles[0] = blt_info.blt_mod_cycles[1] = blt_info.blt_mod_cycles[2] = blt_info.blt_mod_cycles[3] = 0; blitter_cycle_exact = currprefs.blitter_cycle_exact; immediate_blits = currprefs.immediate_blits; - shifter[0] = shifter[1] = shifter[2] = shifter[3] = 0; + shifter[0] = shifter[1] = shifter[2] = shifter[3] = false; + shifter_d[0] = shifter_d[1] = shifter_d[2] = shifter_d[3] = false; + shifter_d_aga[0] = shifter_d_aga[1] = shifter_d_aga[2] = false; + shifter_d_armed = false; shifter_skip_b = false; shifter_skip_y = false; - bltcon0 = 0; - bltcon1 = 0; + blitfill = 0; blitter_start_init(); blt_info.blit_main = 0; blt_info.blit_pending = 0; - blt_info.blit_finald = 0; blt_info.blit_queued = 0; + blt_info.blit_count_done = 0; +#if BLIT_TRACE == 1 + bdp = blit_tracer; +#endif +#if BLIT_TRACE == 2 + bdp = blit_tracer; + FILE* f = fopen("c:\\temp\\blitter_trace.bin", "rb"); + if (f) { + fread(bdp, 1, sizeof(blit_tracer), f); + fclose(f); + } +#endif } #ifdef SAVESTATE void restore_blitter_start(void) { + blt_statefile_type = -1; + bltcon0_next = blt_info.bltcon0; + bltcon1_next = blt_info.bltcon1; blitter_reset(); } -void restore_blitter_finish (void) +void restore_blitter_finish(void) { #ifdef DEBUGGER record_dma_reset(0); @@ -2278,17 +2371,18 @@ void restore_blitter_finish (void) //do_blitter (0); } if (blt_delayed_irq < 0) { - if (intreq & 0x0040) + if (intreq & 0x0040) { blt_delayed_irq = 3; + } intreq &= ~0x0040; } } else { - last_blitter_hpos = 0; - blit_modset(); + blitter_delayed_update = true; + maybe_load_mods(); } } -uae_u8 *restore_blitter (uae_u8 *src) +uae_u8 *restore_blitter(uae_u8 *src) { uae_u32 flags = restore_u32(); @@ -2296,7 +2390,6 @@ uae_u8 *restore_blitter (uae_u8 *src) blt_statefile_type = 0; blt_delayed_irq = 0; blt_info.blit_pending = 0; - blt_info.blit_finald = 0; blt_info.blit_main = 0; if (flags & 4) { if (!(flags & 1)) { @@ -2312,24 +2405,47 @@ uae_u8 *restore_blitter (uae_u8 *src) blt_delayed_irq = -1; } } - bltcon0_old = bltcon0; - bltcon1_old = bltcon1; + bltcon0_old = blt_info.bltcon0; + bltcon1_old = blt_info.bltcon1; return src; } -uae_u8 *save_blitter (size_t *len, uae_u8 *dstptr, bool newstate) +uae_u8 *save_blitter(size_t *len, uae_u8 *dstptr, bool newstate) { uae_u8 *dstbak,*dst; - if (dstptr) + if (dstptr) { dstbak = dst = dstptr; - else + } else { dstbak = dst = xmalloc(uae_u8, 16); - if (blt_info.blit_main || blt_info.blit_finald) { - save_u32(8); + } + + if (blt_info.blit_main) { + save_u32(8 | 16); } else { - save_u32(1 | 4); + save_u32(1 | 4 | 8 | 16); } + + save_u32(blit_cyclecounter); + save_u16(blitter_hcounter); + save_u16(blitter_vcounter); + save_u8((shifter[0] ? 1 : 0) | (shifter[1] ? 2 : 0) | (shifter[2] ? 4 : 0) | (shifter[3] ? 8 : 0) | + (shifter_skip_b_old ? 16 : 0) | (shifter_skip_y_old ? 32 : 0)); + save_u16(blt_info.bltaold); + save_u16(blt_info.bltbold); + save_u16(blt_info.bltamod_next); + save_u16(blt_info.bltbmod_next); + save_u16(blt_info.bltcmod_next); + save_u16(blt_info.bltdmod_next); + save_u16(bltcon0_next); + save_u16(bltcon1_next); + save_u8((shifter_d[0] ? 1 : 0) | (shifter_d[1] ? 2 : 0) | (shifter_d[2] ? 4 : 0) | (shifter_d[3] ? 8 : 0) | (shifter_d_armed ? 128 : 0)); + save_u8((shifter_d_aga[0] ? 1 : 0) | (shifter_d_aga[1] ? 2 : 0) | (shifter_d_aga[2] ? 4 : 0)); + save_u64(blt_info.blt_mod_cycles[0]); + save_u64(blt_info.blt_mod_cycles[1]); + save_u64(blt_info.blt_mod_cycles[2]); + save_u64(blt_info.blt_mod_cycles[3]); + *len = dst - dstbak; return dstbak; @@ -2368,7 +2484,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) restore_u8(); restore_u8(); restore_u8(); - blt_info.blit_finald = restore_u8(); + restore_u8(); blitfc = restore_u8(); blitife = restore_u8(); @@ -2377,9 +2493,9 @@ uae_u8 *restore_blitter_new(uae_u8 *src) restore_u8(); restore_u8(); - ddatuse = restore_u8(); restore_u8(); - ddat = restore_u16(); + restore_u8(); + blt_info.bltddat = restore_u16(); restore_u16(); blitline = restore_u8(); @@ -2399,7 +2515,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) blt_info.got_cycle = restore_u8(); restore_u8(); - blit_faulty = restore_u8(); + restore_u8(); restore_u8(); restore_u8(); restore_u8(); @@ -2413,7 +2529,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) tmp = restore_u8(); if (blt_statefile_type < 2) { tmp = 0; - blt_info.blit_finald = 0; + //blt_info.blit_finald = 0; } else { shifter[0] = (tmp & 1) != 0; shifter[1] = (tmp & 2) != 0; @@ -2421,7 +2537,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) shifter[3] = (tmp & 8) != 0; shifter_skip_b_old = (tmp & 16) != 0; shifter_skip_y_old = (tmp & 32) != 0; - blt_info.blit_finald = restore_u8(); + restore_u8(); blit_ovf = restore_u8(); } @@ -2430,7 +2546,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) if (!blitter_cycle_exact) { if (state > 0) - do_blitter(0, 0, 0); + do_blitter(0, 0); } else { // if old blitter active state file: // stop blitter. We can't support them anymore. @@ -2444,16 +2560,17 @@ uae_u8 *restore_blitter_new(uae_u8 *src) blt_info.blit_main = 1; blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; } - if (blt_info.blit_finald) { - blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; - blt_info.blit_main = 0; - } +// if (blt_info.blit_finald) { +// blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; +// blt_info.blit_main = 0; +// } if (blt_statefile_type == 2) { blit_bltset(0); } } shifter_skip_b_old = shifter_skip_b; shifter_skip_y_old = shifter_skip_y; + blitfill_old = blitfill; } blit_first_cycle |= ((uae_u64)restore_u32()) << 32; @@ -2465,18 +2582,51 @@ uae_u8 *restore_blitter_new(uae_u8 *src) blt_info.nasty_cnt = restore_u8(); blt_info.wait_nasty = restore_u8(); - shifter_first = (uae_s8)restore_u8(); - blt_info.finishhpos = restore_u8(); + restore_u8(); + + restore_u8(); //blt_info.finishhpos = restore_u8(); blit_cyclecounter = restore_u32(); for (int i = 0; i < 4; i++) { - blitter_pipe[i] = restore_u16(); - if (blitter_pipe[i]) { - blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; - } - cycle_line_pipe[i] = restore_u16(); - cycle_line_slot[i] = restore_u8(); +// blitter_pipe[i] = restore_u16(); +// if (blitter_pipe[i]) { +// blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; +// } + restore_u16(); + restore_u8(); +// cycle_line_pipe[i] = restore_u16(); +// cycle_line_slot[i] = restore_u8(); + } + + if (restore_u16() == 0x1235) { + blt_info.bltamod_next = restore_u16(); + blt_info.bltbmod_next = restore_u16(); + blt_info.bltcmod_next = restore_u16(); + blt_info.bltdmod_next = restore_u16(); + bltcon0_next = restore_u16(); + bltcon1_next = restore_u16(); + tmp = restore_u8(); + shifter_d[0] = (tmp & 1) != 0; + shifter_d[1] = (tmp & 2) != 0; + shifter_d[2] = (tmp & 4) != 0; + shifter_d[3] = (tmp & 4) != 0; + shifter_d_armed = (tmp & 128) != 0; + tmp = restore_u8(); + shifter_d_aga[0] = (tmp & 1) != 0; + shifter_d_aga[1] = (tmp & 2) != 0; + shifter_d_aga[2] = (tmp & 4) != 0; + tmp = restore_u32(); + blt_info.finishcycle_dmacon = restore_u64(); + blt_info.finishcycle_copper = restore_u64(); + blt_info.blt_mod_cycles[0] = restore_u64(); + blt_info.blt_mod_cycles[1] = restore_u64(); + blt_info.blt_mod_cycles[2] = restore_u64(); + blt_info.blt_mod_cycles[3] = restore_u64(); + blt_info.blt_ch_cycles[0] = restore_u64(); + blt_info.blt_ch_cycles[1] = restore_u64(); + blt_info.blt_ch_cycles[2] = restore_u64(); + blt_info.blt_ch_cycles[3] = restore_u64(); } //activate_debugger(); @@ -2494,18 +2644,16 @@ uae_u8 *save_blitter_new(size_t *len, uae_u8 *dstptr) uae_u8 state; save_u8(blitter_cycle_exact ? 3 : 0); - if (!blt_info.blit_main && !blt_info.blit_finald) { + if (!blt_info.blit_main) { state = 0; } else if (blt_info.blit_pending) { state = 1; - } else if (blt_info.blit_finald) { - state = 3; } else { state = 2; } save_u8(state); - if (blt_info.blit_main || blt_info.blit_finald) { + if (blt_info.blit_main) { write_log(_T("BLITTER active while saving state\n")); if (log_blitter) blitter_dump(); @@ -2529,28 +2677,28 @@ uae_u8 *save_blitter_new(size_t *len, uae_u8 *dstptr) save_u8(blit_dmacount); save_u8(blit_cyclecount); save_u8(0); //(blit_nod); - save_u8(blt_info.blit_finald); + save_u8(0); //blt_info.blit_finald); save_u8(blitfc); save_u8(blitife); - save_u8(bltcon1 >> 12); - save_u8((16 - (bltcon1 >> 12))); - save_u8(bltcon0 >> 12); - save_u8(16 - (bltcon0 >> 12)); + save_u8(blt_info.bltcon1 >> 12); + save_u8((16 - (blt_info.bltcon1 >> 12))); + save_u8(blt_info.bltcon0 >> 12); + save_u8(16 - (blt_info.bltcon0 >> 12)); - save_u8(ddatuse); + save_u8(0); save_u8(0); //(ddat2use); - save_u16(ddat); + save_u16(blt_info.bltddat); save_u16(0); //(ddat2); save_u8(blitline); save_u8(blitfill); save_u16(blt_info.bltadat); save_u16(blineb); - save_u8(bltcon0 >> 12); + save_u8(blt_info.bltcon0 >> 12); save_u8(blitonedot); save_u8(blitlinepixel); - save_u8((bltcon1 & BLTSING) != 0); + save_u8((blt_info.bltcon1 & BLTSING) != 0); save_u8((blitlinepixel ? 1 : 0) | (blitlineloop ? 2 : 0)); save_u8(blt_info.blit_interrupt); save_u8(blt_delayed_irq); @@ -2558,7 +2706,7 @@ uae_u8 *save_blitter_new(size_t *len, uae_u8 *dstptr) save_u8(blt_info.got_cycle); save_u8(0); //(blit_frozen); - save_u8(blit_faulty); + save_u8(0); save_u8(0); //original_ch); save_u8(0); //original_fill); save_u8(0); //original_line); @@ -2569,7 +2717,7 @@ uae_u8 *save_blitter_new(size_t *len, uae_u8 *dstptr) save_u8(blt_info.blitter_nasty); save_u8((shifter[0] ? 1 : 0) | (shifter[1] ? 2 : 0) | (shifter[2] ? 4 : 0) | (shifter[3] ? 8 : 0) | (shifter_skip_b_old ? 16 : 0) | (shifter_skip_y_old ? 32 : 0)); - save_u8(blt_info.blit_finald); + save_u8(0); //blt_info.blit_finald); save_u8(blit_ovf); save_u32(blit_first_cycle >> 32); @@ -2581,16 +2729,37 @@ uae_u8 *save_blitter_new(size_t *len, uae_u8 *dstptr) save_u8(blt_info.nasty_cnt); save_u8(blt_info.wait_nasty); - save_u8(shifter_first); - save_u8(blt_info.finishhpos); + save_u8(0); + save_u8(0xff);//blt_info.finishhpos); save_u32(blit_cyclecounter); for (int i = 0; i < 4; i++) { - save_u16(blitter_pipe[i]); - save_u16(cycle_line_pipe[i]); - save_u8(cycle_line_slot[i]); - } + save_u16(0); // save_u16(blitter_pipe[i]); + save_u16(0); //cycle_line_pipe[i]); + save_u8(0); //cycle_line_slot[i]); + } + + save_u16(0x1235); + save_u16(blt_info.bltamod_next); + save_u16(blt_info.bltbmod_next); + save_u16(blt_info.bltcmod_next); + save_u16(blt_info.bltdmod_next); + save_u16(bltcon0_next); + save_u16(bltcon1_next); + save_u8((shifter_d[0] ? 1 : 0) | (shifter_d[1] ? 2 : 0) | (shifter_d[2] ? 4 : 0) | (shifter_d[3] ? 8 : 0) | (shifter_d_armed ? 128 : 0)); + save_u8((shifter_d_aga[0] ? 1 : 0) | (shifter_d_aga[1] ? 2 : 0) | (shifter_d_aga[2] ? 4 : 0)); + save_u64(blt_info.finishcycle_dmacon); + save_u64(blt_info.finishcycle_copper); + + save_u64(blt_info.blt_mod_cycles[0]); + save_u64(blt_info.blt_mod_cycles[1]); + save_u64(blt_info.blt_mod_cycles[2]); + save_u64(blt_info.blt_mod_cycles[3]); + save_u64(blt_info.blt_ch_cycles[0]); + save_u64(blt_info.blt_ch_cycles[1]); + save_u64(blt_info.blt_ch_cycles[2]); + save_u64(blt_info.blt_ch_cycles[3]); *len = dst - dstbak; return dstbak; diff --git a/cfgfile.cpp b/cfgfile.cpp index ae4af973..c6db413a 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -139,7 +139,14 @@ static const struct cfg_lines opttable[] = static const TCHAR *guimode1[] = { _T("no"), _T("yes"), _T("nowait"), 0 }; static const TCHAR *guimode2[] = { _T("false"), _T("true"), _T("nowait"), 0 }; static const TCHAR *guimode3[] = { _T("0"), _T("1"), _T("nowait"), 0 }; -static const TCHAR *csmode[] = { _T("ocs"), _T("ecs_agnus"), _T("ecs_denise"), _T("ecs"), _T("aga"), 0 }; +static const TCHAR *csmode[] = { + _T("a1000_noehb"), _T("a1000"), + _T("ocs"), // OCS Agnus + OCS Denise + _T("ecs_agnus"), // ECS Agnus + OCS Denise + _T("ecs_denise"), // OCS Agnus + ECS Denise + _T("ecs"), // ECS Agnus + ECS Denise + _T("aga"), + NULL}; static const TCHAR *linemode[] = { _T("none"), _T("double"), _T("scanlines"), _T("scanlines2p"), _T("scanlines3p"), @@ -2649,18 +2656,23 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_dwrite (f, _T("keyboard_leds"), _T("numlock:%s,capslock:%s,scrolllock:%s"), kbleds[p->keyboard_leds[0]], kbleds[p->keyboard_leds[1]], kbleds[p->keyboard_leds[2]]); if (p->chipset_mask & CSMASK_AGA) - cfgfile_write (f, _T("chipset"),_T("aga")); + cfgfile_write (f, _T("chipset"), _T("aga")); else if ((p->chipset_mask & CSMASK_ECS_AGNUS) && (p->chipset_mask & CSMASK_ECS_DENISE)) - cfgfile_write (f, _T("chipset"),_T("ecs")); + cfgfile_write (f, _T("chipset"), _T("ecs")); else if (p->chipset_mask & CSMASK_ECS_AGNUS) - cfgfile_write (f, _T("chipset"),_T("ecs_agnus")); + cfgfile_write (f, _T("chipset"), _T("ecs_agnus")); else if (p->chipset_mask & CSMASK_ECS_DENISE) - cfgfile_write (f, _T("chipset"),_T("ecs_denise")); + cfgfile_write (f, _T("chipset"), _T("ecs_denise")); + else if (p->chipset_mask & CSMASK_A1000_NOEHB) + cfgfile_write (f, _T("chipset"), _T("a1000_noehb")); + else if (p->chipset_mask & CSMASK_A1000) + cfgfile_write (f, _T("chipset"), _T("a1000")); else cfgfile_write (f, _T("chipset"), _T("ocs")); if (p->chipset_refreshrate > 0) cfgfile_write (f, _T("chipset_refreshrate"), _T("%f"), p->chipset_refreshrate); cfgfile_dwrite_bool(f, _T("chipset_subpixel"), p->chipset_hr); + cfgfile_dwrite_bool(f, _T("chipset_black_level_calibration"), p->display_calibration); for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { struct chipset_refresh *cr = &p->cr[i]; @@ -3466,10 +3478,12 @@ static int cfgfile_option_bool(TCHAR *s, const TCHAR *option) } static void set_chipset_mask (struct uae_prefs *p, int val) { - p->chipset_mask = (val == 0 ? 0 - : val == 1 ? CSMASK_ECS_AGNUS - : val == 2 ? CSMASK_ECS_DENISE - : val == 3 ? CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS + p->chipset_mask = (val == 0 ? CSMASK_A1000_NOEHB + : val == 1 ? CSMASK_A1000 + : val == 2 ? CSMASK_OCS + : val == 3 ? CSMASK_ECS_AGNUS + : val == 4 ? CSMASK_ECS_DENISE + : val == 5 ? CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS : CSMASK_AGA | CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS); } @@ -6350,10 +6364,13 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH set_chipset_mask (p, tmpval); return 1; } - + if (cfgfile_yesno(option, value, _T("chipset_subpixel"), &p->chipset_hr)) { return 1; } + if (cfgfile_yesno(option, value, _T("chipset_black_level_calibration"), &p->display_calibration)) { + return 1; + } if (cfgfile_string (option, value, _T("mmu_model"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { TCHAR *s =_tcsstr(tmpbuf, _T("ec")); @@ -8499,7 +8516,7 @@ void default_prefs (struct uae_prefs *p, bool reset, int type) p->immediate_blits = 0; p->waiting_blits = 0; - p->collision_level = 2; + p->collision_level = 3; p->leds_on_screen = 0; p->leds_on_screen_mask[0] = p->leds_on_screen_mask[1] = (1 << LED_MAX) - 1; p->keyboard_leds_in_use = 0; @@ -8628,6 +8645,7 @@ void default_prefs (struct uae_prefs *p, bool reset, int type) p->blitter_cycle_exact = 0; p->chipset_mask = CSMASK_ECS_AGNUS; p->chipset_hr = false; + p->display_calibration = false; p->genlock = 0; p->genlock_image = 0; p->genlock_mix = 0; @@ -8677,6 +8695,7 @@ void default_prefs (struct uae_prefs *p, bool reset, int type) p->statecapturebuffersize = 100; p->statecapturerate = 5 * 50; p->inprec_autoplay = true; + p->statefile_path[0] = 0; #ifdef UAE_MINI default_prefs_mini (p, 0); @@ -8790,7 +8809,7 @@ static void buildin_default_prefs (struct uae_prefs *p) p->chipset_mask = CSMASK_ECS_AGNUS; p->immediate_blits = 0; p->waiting_blits = 0; - p->collision_level = 2; + p->collision_level = 3; if (p->produce_sound < 1) p->produce_sound = 1; p->scsi = 0; @@ -9073,7 +9092,7 @@ static int bip_a4000t (struct uae_prefs *p, int config, int compa, int romcheck) static void bip_velvet(struct uae_prefs *p, int config, int compa, int romcheck) { - p->chipset_mask = 0; + p->chipset_mask = CSMASK_A1000; p->bogomem.size = 0; p->sound_filter = FILTER_SOUND_ON; set_68000_compa (p, compa); @@ -9093,18 +9112,16 @@ static int bip_a1000 (struct uae_prefs *p, int config, int compa, int romcheck) roms[0] = 24; roms[1] = -1; - p->chipset_mask = 0; + p->chipset_mask = CSMASK_A1000; p->bogomem.size = 0; p->sound_filter = FILTER_SOUND_ON; set_68000_compa (p, compa); p->floppyslots[1].dfxtype = DRV_NONE; p->cs_compatible = CP_A1000; p->bogomem.chipramtiming = false; - p->cs_agnusmodel = AGNUSMODEL_A1000; - p->cs_denisemodel = DENISEMODEL_A1000; built_in_chipset_prefs (p); if (config > 0) { - p->cs_denisemodel = DENISEMODEL_A1000NOEHB; + p->chipset_mask = CSMASK_A1000_NOEHB; } if (config > 1) p->chipmem.size = 0x40000; @@ -9347,7 +9364,7 @@ static int bip_a500 (struct uae_prefs *p, int config, int compa, int romcheck) case 0: // KS 1.3, OCS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 6; roms[1] = 32; - p->chipset_mask = 0; + p->chipset_mask = CSMASK_OCS; break; case 1: // KS 1.3, ECS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 6; @@ -9363,7 +9380,7 @@ static int bip_a500 (struct uae_prefs *p, int config, int compa, int romcheck) roms[0] = 6; roms[1] = 32; p->bogomem.size = 0; - p->chipset_mask = 0; + p->chipset_mask = CSMASK_OCS; p->cs_rtc = 0; p->floppyslots[1].dfxtype = DRV_NONE; break; @@ -9371,14 +9388,14 @@ static int bip_a500 (struct uae_prefs *p, int config, int compa, int romcheck) roms[0] = 5; roms[1] = 4; p->bogomem.size = 0; - p->chipset_mask = 0; + p->chipset_mask = CSMASK_OCS; p->cs_rtc = 0; p->floppyslots[1].dfxtype = DRV_NONE; break; case 5: // KS 1.2, OCS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 5; roms[1] = 4; - p->chipset_mask = 0; + p->chipset_mask = CSMASK_OCS; break; } set_68000_compa (p, compa); diff --git a/cia.cpp b/cia.cpp index 2576ae83..ab358662 100644 --- a/cia.cpp +++ b/cia.cpp @@ -216,11 +216,11 @@ void cia_set_eclockphase(void) static evt_t get_e_cycles(void) { // temporary e-clock phase shortcut - if (blop) { + if (0 && blop) { cia_adjust_eclock_phase(1); blop = 0; } - if (blop2) { + if (0 && blop2) { if (currprefs.cs_eclocksync == 0) { currprefs.cs_eclocksync = 1; } @@ -295,7 +295,7 @@ static void RethinkICR(int num) c->icr1 |= 0x80 | 0x40; #ifdef DEBUGGER if (debug_dma) { - record_dma_event(num ? DMA_EVENT_CIAB_IRQ : DMA_EVENT_CIAA_IRQ, current_hpos(), vpos); + record_dma_event(num ? DMA_EVENT_CIAB_IRQ : DMA_EVENT_CIAA_IRQ); } #endif ICR(num); @@ -552,10 +552,14 @@ static void CIA_update_check(void) } if (cc > 0) { c->t[0].timer -= cc; + c->t[0].timer &= 0xffff; if (c->t[0].timer == 0) { // SP in output mode (data sent can be ignored if CIA-A) if ((c->t[0].cr & (CR_SPMODE | CR_RUNMODE)) == CR_SPMODE && c->sdr_cnt > 0) { c->sdr_cnt--; + if (c->sdr_cnt & 1) { + c->sdr_buf <<= 1; + } if (c->sdr_cnt == 0) { sp = 1; if (c->sdr_load) { @@ -580,6 +584,7 @@ static void CIA_update_check(void) ovfl[1] = 2; } else { c->t[1].timer -= cc; + c->t[1].timer &= 0xffff; if ((c->t[1].timer == 0 && !(c->t[1].cr & (CR_INMODE | CR_INMODE1)))) { ovfl[1] = 2; } @@ -1648,7 +1653,15 @@ static void CIA_cr_write(int num, int tnum, uae_u8 val) } } + // clear serial port state when switching TX<>RX + if (num == 0 && (t->cr & 0x40) != (val & 0x040)) { + c->sdr_cnt = 0; + c->sdr_load = 0; + c->sdr_buf = 0; + } + t->cr = val; + } static void WriteCIAReg(int num, int reg, uae_u8 val) @@ -1783,7 +1796,9 @@ static uae_u8 ReadCIAA(uae_u32 addr, uae_u32 *flags) switch (reg) { case 0: { - *flags |= 1; + if (flags) { + *flags |= 1; + } uae_u8 v = DISK_status_ciaa() & 0x3c; v |= handle_joystick_buttons(c->pra, c->dra); v |= (c->pra | (c->dra ^ 3)) & 0x03; @@ -1801,7 +1816,7 @@ static uae_u8 ReadCIAA(uae_u32 addr, uae_u32 *flags) write_log(_T("BFE001 R %02X %s\n"), v, debuginfo(0)); #endif - if (inputrecord_debug & 2) { + if (flags && (inputrecord_debug & 2)) { if (input_record > 0) inprec_recorddebug_cia(v, 0, m68k_getpc ()); else if (input_play > 0) @@ -1825,12 +1840,16 @@ static uae_u8 ReadCIAA(uae_u32 addr, uae_u32 *flags) #endif } else if (currprefs.win32_samplersoundcard >= 0) { - tmp = sampler_getsample((c->pra & 4) ? 1 : 0); + if (flags) { + tmp = sampler_getsample((c->pra & 4) ? 1 : 0); + } #endif } else if (parallel_port_scsi) { - tmp = parallel_port_scsi_read(0, c->prb, c->drb); + if (flags) { + tmp = parallel_port_scsi_read(0, c->prb, c->drb); + } } else { tmp = handle_parport_joystick (0, tmp); @@ -1901,10 +1920,14 @@ static uae_u8 ReadCIAB(uae_u32 addr, uae_u32 *flags) } else if (isprinter() < 0) { uae_u8 v; tmp &= ~7; - parallel_direct_read_status(&v); + if (flags) { + parallel_direct_read_status(&v); + } tmp |= v & 7; } else if (parallel_port_scsi) { - tmp = parallel_port_scsi_read(1, c->pra, c->dra); + if (flags) { + tmp = parallel_port_scsi_read(1, c->pra, c->dra); + } } else { // serial port in output mode if (c->t[0].cr & 0x40) { @@ -2225,7 +2248,7 @@ void cia_set_overlay(bool overlay) oldovl = overlay; } -void CIA_reset(void) +void CIA_reset(int hardreset) { #ifdef TOD_HACK tod_hack_tv = 0; @@ -2249,6 +2272,9 @@ void CIA_reset(void) if (!savestate_state) { oldovl = true; kbstate = 0; + // serial port data is not reset + uae_u8 sdra = cia[0].sdr; + uae_u8 sdrb = cia[1].sdr; memset(&cia, 0, sizeof(cia)); cia[0].t[0].timer = 0xffff; cia[0].t[1].timer = 0xffff; @@ -2259,6 +2285,10 @@ void CIA_reset(void) cia[1].t[0].latch = 0xffff; cia[1].t[1].latch = 0xffff; cia[1].pra = 0x8c; + if (!hardreset) { + cia[0].sdr = sdra; + cia[1].sdr = sdrb; + } internaleclockphase = 0; CIA_calctimers(); DISK_select_set(cia[1].prb); @@ -2289,14 +2319,21 @@ void dumpcia(void) compute_passed_time(); + uae_u8 apra = ReadCIAA(0, NULL); + uae_u8 aprb = ReadCIAA(1, NULL); + uae_u8 bpra = ReadCIAB(0, NULL); + uae_u8 bprb = ReadCIAB(1, NULL); + console_out_f(_T("A: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n"), - a->t[0].cr, a->t[1].cr, a->icr1, a->imask, a->t[0].timer - a->t[0].passed, a->t[0].latch, a->t[1].timer - a->t[1].passed, a->t[1].latch); - console_out_f(_T(" PRA %02x PRB %02x DDRA %02x DDRB %02x\n"), a->pra, a->prb, a->dra, a->drb); + a->t[0].cr, a->t[1].cr, a->icr1, a->imask, a->t[0].timer - a->t[0].passed, + a->t[0].latch, a->t[1].timer - a->t[1].passed, a->t[1].latch); + console_out_f(_T(" PRA %02x [%02x] PRB %02x [%02x] DDRA %02x DDRB %02x\n"), a->pra, apra, a->prb, aprb, a->dra, a->drb); console_out_f(_T(" TOD %06x (%06x) ALARM %06x %c%c CYC=%016llX\n"), a->tod, a->tol, a->alarm, a->tlatch ? 'L' : '-', a->todon ? '-' : 'S', get_cycles()); console_out_f(_T("B: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n"), - b->t[0].cr, b->t[1].cr, b->icr1, b->imask, b->t[0].timer - b->t[0].passed, b->t[0].latch, b->t[1].timer - b->t[1].passed, b->t[1].latch); - console_out_f(_T(" PRA %02x PRB %02x DDRA %02x DDRB %02x\n"), b->pra, b->prb, b->dra, b->drb); + b->t[0].cr, b->t[1].cr, b->icr1, b->imask, b->t[0].timer - b->t[0].passed, + b->t[0].latch, b->t[1].timer - b->t[1].passed, b->t[1].latch); + console_out_f(_T(" PRA %02x [%02x] PRB %02x [%02x] DDRA %02x DDRB %02x\n"), b->pra, bpra, b->prb, bprb, b->dra, b->drb); console_out_f(_T(" TOD %06x (%06x) ALARM %06x %c%c\n"), b->tod, b->tol, b->alarm, b->tlatch ? 'L' : '-', b->todon ? '-' : 'S'); } @@ -2318,7 +2355,7 @@ static int cia_cycles(int delay, int phase, int val, int post) if (currprefs.cpu_memory_cycle_exact && debug_dma) { while (delay > 0) { int hpos = current_hpos(); - record_cia_access(0xfffff, 0, 0, 0, hpos, vpos, phase + 1); + record_cia_access(0xfffff, 0, 0, 0, phase + 1); phase += 2; if (post) { x_do_cycles_post(CYCLE_UNIT, val); @@ -2380,7 +2417,7 @@ static void cia_wait_post(int cianummask, uaecptr addr, uae_u32 value, bool rw) if (currprefs.cpu_memory_cycle_exact && debug_dma) { int r = (addr & 0xf00) >> 8; int hpos = current_hpos(); - record_cia_access(r, cianummask, value, rw, hpos, vpos, -1); + record_cia_access(r, cianummask, value, rw, -1); } #endif diff --git a/custom.cpp b/custom.cpp index a8a60c36..7488b32b 100644 --- a/custom.cpp +++ b/custom.cpp @@ -5,7 +5,9 @@ * * Copyright 1995-2002 Bernd Schmidt * Copyright 1995 Alessandro Bissacco -* Copyright 2000-2023 Toni Wilen +* Copyright 2000-2024 Toni Wilen +* +* Complete rewrite 2024 */ #include "sysconfig.h" @@ -50,7 +52,8 @@ #include "rommgr.h" #include "specialmonitors.h" -#define BPL_ERASE_TEST 0 + +#define VPOSW_DEBUG 0 #define FRAMEWAIT_MIN_MS 2 #define FRAMEWAIT_SPLIT 4 @@ -63,16 +66,9 @@ #define SPRITE_DEBUG 0 #define SPRITE_DEBUG_MINY 0 #define SPRITE_DEBUG_MAXY 0x30 -#define MAX_SPRITES 8 -#define AUTOSCALE_SPRITES 1 -#define ALL_SUBPIXEL 1 -#define RGA_COPPER_PIPELINE_DEPTH 2 -#define RGA_SPRITE_PIPELINE_DEPTH 2 #define REFRESH_FIRST_HPOS 3 -#define DMAL_FIRST_HPOS 11 -#define SPR_FIRST_HPOS 25 -#define COPPER_CYCLE_POLARITY 0 +#define COPPER_CYCLE_POLARITY 1 #define HARDWIRED_DMA_TRIGGER_HPOS 1 #define REF_RAS_ADD_AGA 0x000 @@ -84,8 +80,8 @@ #define EXTRAWIDTH_BROADCAST 15 #define EXTRAHEIGHT_BROADCAST_TOP 0 #define EXTRAHEIGHT_BROADCAST_BOTTOM 0 -#define EXTRAWIDTH_EXTREME 33 -#define EXTRAHEIGHT_EXTREME 24 +#define EXTRAWIDTH_EXTREME 38 +#define EXTRAHEIGHT_EXTREME 28 #define EXTRAWIDTH_ULTRA 77 #define LORES_TO_SHRES_SHIFT 2 @@ -94,6 +90,209 @@ extern uae_u16 serper; #endif +struct pipeline_func +{ + evfunc2 func; + uae_u16 v; + uae_u16 cck; +}; +#define MAX_PIPELINE_REG 3 +struct pipeline_reg +{ + uae_u16 *p; + uae_u16 v; +}; +uae_u8 agnus_hpos; +int agnus_hpos_prev, agnus_hpos_next, agnus_vpos_next; +static int agnus_pos_change; +static uae_u32 dmal_shifter; +static uae_u16 pipelined_write_addr; +static uae_u16 pipelined_write_value; +static struct rgabuf rga_pipe[RGA_SLOT_TOTAL + 1]; +struct denise_rga rga_denise[DENISE_RGA_SLOT_TOTAL]; +static int rga_denise_cycle, rga_denise_cycle_start, rga_denise_cycle_start_prev, rga_denise_cycle_count; +static int rga_denise_cycle_line = 1; +static struct pipeline_reg preg; +static struct pipeline_func pfunc[MAX_PIPELINE_REG]; +static uae_u16 prev_strobe; +static uae_u32 custom_state_flags; +static int not_safe_mode; +static bool dmal_next; + +static evt_t blitter_dma_change_cycle, copper_dma_change_cycle, sprite_dma_change_cycle_on, sprite_dma_change_cycle_off; + +static void empty_pipeline(void) +{ + if (preg.p) { + *preg.p = preg.v; + preg.p = NULL; + } +} +static void push_pipeline(uae_u16 *p, uae_u16 v) +{ + if (preg.p) { + // cpu or fast copper can cause this + empty_pipeline(); + } + preg.p = p; + preg.v = v; +} +static void pipelined_custom_write(evfunc2 func, uae_u16 v, uae_u16 cck) +{ + if (!cck || isrestore()) { + func(v); + return; + } + for (int i = 0 ; i < MAX_PIPELINE_REG; i++) { + struct pipeline_func *p = &pfunc[i]; + if (!p->func) { + p->func = func; + p->v = v; + p->cck = cck; + return; + } + } + write_log("pipelined_custom_write overflow!\n"); +} +static void handle_pipelined_custom_write(bool now) +{ + for (int i = 0 ; i < MAX_PIPELINE_REG; i++) { + struct pipeline_func *p = &pfunc[i]; + if (p->func) { + p->cck--; + if (!p->cck || now) { + p->func(p->v); + p->func = NULL; + } + } + } +} + +static uae_u32 rga_slot_in_offset, rga_slot_first_offset, rga_slot_out_offset; +static evt_t last_rga_cycle; + +static void write_drga(uae_u16 rga, uaecptr pt, uae_u32 v) +{ + struct denise_rga *r = &rga_denise[rga_denise_cycle]; + if (r->line == rga_denise_cycle_line) { + write_log("write_drga conflict %04x/%04x -> %04x/%04x\n", r->rga, r->v, rga, v); + } + + r->rga = rga; + r->v = v; + r->pt = pt; + r->flags = 0; + r->line = rga_denise_cycle_line; +}; +static void write_drga_wide(uae_u16 rga, uaecptr pt, uae_u64 v) +{ + struct denise_rga *r = &rga_denise[rga_denise_cycle]; + if (r->line == rga_denise_cycle_line) { + write_log("write_drga conflict %04x/%04x -> %04x/%04x\n", r->rga, r->v, rga, v); + } + + r->rga = rga; + r->v64 = v; + r->pt = pt; + r->flags = 0; + r->line = rga_denise_cycle_line; +}; +static void write_drga_flag(uae_u32 flags, uae_u32 mask) +{ + struct denise_rga *r = &rga_denise[rga_denise_cycle]; + if (r->line != rga_denise_cycle_line) { + r->line = rga_denise_cycle_line; + r->rga = 0x1fe; + r->flags = 0; + } + r->flags &= ~mask; + r->flags |= flags; +} + +static uae_u32 dummyrgaaddr; +struct rgabuf *write_rga(int slot, int type, uae_u16 v, uae_u32 *p) +{ + struct rgabuf *r = &rga_pipe[(slot + rga_slot_first_offset) & 3]; + + bool strobe = (v >= 0x38 && v < 0x40) || v == 0x1fe; + + if (r->reg != 0x1fe && !strobe) { + write_log("RGA conflict: %04x -> %04x, %08x | %08x -> %08x, %04x, %d\n", + r->reg, v, + p ? *p : 0, r->pv, (p ? *p : 0) | r->pv, + v, + slot); + } + // RGA bus address conflict causes AND operation + r->reg &= v; + r->type |= type; + r->alloc = 1; + if (p && r->p) { + // DMA address pointer conflict causes both old and new address to becomes old OR new. + r->conflict = r->p; + *r->p |= *p; + *p = *r->p; + r->pv |= *p; + } else if (p) { + r->p = p; + r->pv = *p; + } + return r; +} + +STATIC_INLINE rgabuf *read_rga_out(void) +{ + struct rgabuf *r = &rga_pipe[rga_slot_out_offset]; + return r; +} +STATIC_INLINE rgabuf *read_rga_in(void) +{ + struct rgabuf *r = &rga_pipe[rga_slot_in_offset]; + return r; +} + +struct rgabuf *read_rga(int slot) +{ + struct rgabuf *r = &rga_pipe[(slot + rga_slot_first_offset) & 3]; + return r; +} +bool check_rga_free_slot_in(void) +{ + struct rgabuf *r = &rga_pipe[rga_slot_in_offset]; + return r->alloc <= 0; +} +STATIC_INLINE bool check_rga_out(void) +{ + struct rgabuf *r = &rga_pipe[rga_slot_out_offset]; + return r->alloc; +} + +bool check_rga(int slot) +{ + struct rgabuf *r = &rga_pipe[(slot + rga_slot_first_offset) & 3]; + return r->alloc; +} +static void shift_rga(void) +{ + rga_slot_first_offset--; + rga_slot_in_offset--; + rga_slot_out_offset--; + rga_slot_first_offset &= 3; + rga_slot_in_offset &= 3; + rga_slot_out_offset &= 3; + + struct rgabuf *r = &rga_pipe[rga_slot_first_offset]; + + r->reg = 0x1fe; + r->p = NULL; + r->pv = 0; + r->type = 0; + r->alloc = 0; + r->write = false; + r->conflict = NULL; +} + + static void uae_abort (const TCHAR *format,...) { static int nomore; @@ -128,24 +327,25 @@ static int rpt_did_reset; struct ev eventtab[ev_max]; struct ev2 eventtab2[ev2_max]; -int vpos, vpos_prev, vposh; -static int hpos_hsync_extra; -static int vpos_count, vpos_count_diff; -int lof_store; // real bit in custom registers -int lof_display; // what display device thinks -int scandoubled_line; -static bool lof_lastline, lof_prev_lastline; -static int lol, lol_prev; +int vpos, vpos_prev; +bool lof_store; // real bit in custom registers +bool lof_display; // what display device thinks +static bool lof_detect, lof_pdetect; +static bool lof_detect_vsync; +static bool lol; static bool linetoggle; static int next_lineno; -static int linear_vpos; +int linear_vpos, linear_hpos, linear_vpos_prev[3], linear_hpos_prev[3]; +static int linear_vpos_vsync; +static int linear_display_vpos; +int current_linear_vpos, current_linear_hpos; +static int display_hstart_cyclewait, display_hstart_cyclewait_cnt, display_hstart_cyclewait_end; +static bool display_hstart_cyclewait_start; +static int agnus_trigger_cck; +static int linear_vpos_changes; static enum nln_how nextline_how; -static int lof_changed = 0, lof_changing = 0, interlace_changed = 0; -static int lof_changed_previous_field; -static int vposw_change; -static bool lof_lace; +static int lof_changed = 0, lof_changing = 0; static bool prevlofs[3]; -static bool bplcon0_interlace_seen; static bool vsync_rendered, frame_rendered, frame_shown; static frame_time_t vsynctimeperline; static frame_time_t frameskiptime; @@ -153,21 +353,12 @@ static bool genlockhtoggle; static bool genlockvtoggle; static bool graphicsbuffer_retry; static int cia_hsync; -static bool toscr_scanline_complex_bplcon1, toscr_scanline_complex_bplcon1_off; -static int toscr_hend; static int nosignal_cnt, nosignal_status; static bool nosignal_trigger; static int issyncstopped_count; int display_reset; -static evt_t line_start_cycles; static bool initial_frame; -static evt_t custom_color_write_cycle; -static int color_writes_num; -static bool line_equ_freerun; - -#define LOF_TOGGLES_NEEDED 3 -//#define NLACE_CNT_NEEDED 50 -static int lof_togglecnt_lace, lof_togglecnt_nlace; //, nlace_cnt; +static int plffirstline, plflastline; /* Stupid genlock-detection prevention hack. * We should stop calling vsync_handler() and @@ -179,14 +370,6 @@ static int vpos_lpen, hpos_lpen, hhpos_lpen, lightpen_triggered; int lightpen_x[2], lightpen_y[2]; int lightpen_cx[2], lightpen_cy[2], lightpen_active, lightpen_enabled, lightpen_enabled2; -static uae_u32 sprtaba[256],sprtabb[256]; -static uae_u32 sprite_ab_merge[256]; -/* Tables for collision detection. */ -static uae_u32 sprclx[16], clxmask[16]; - -/* T genlock bit in ECS Denise and AGA color registers */ -static uae_u8 color_regs_genlock[256]; - /* * Hardware registers of all sorts. */ @@ -196,51 +379,55 @@ static uae_u16 cregs[256]; uae_u16 intena, intreq; static uae_u16 intena2, intreq2; uae_u16 dmacon; +static uae_u16 dmacon_next; uae_u16 adkcon; /* used by audio code */ uae_u16 last_custom_value; -static bool dmacon_bpl, vdiwstate_bpl; +static bool dmacon_bpl; static uae_u32 cop1lc, cop2lc, copcon; + /* -* Horizontal defaults +* Horizontal hardwired defaults * -* 0x00 0 HCB -* 0x01 1 HC1 (HSTART) -* 0x09 9 VR1 (HBLANK start) -* 0x12 18 SHS (Horizontal sync start) -* 0x1a 26 VER1 PAL -* 0x1b 27 VER1 NTSC -* 0x23 35 RHS (Horizontal sync end) -* 0x73 115 VR2 -* 0x84 132 CEN (HCENTER) -* 0x8c 140 VER2 PAL (CEN->VER2 = CSYNC qualising pulse 2) -* 0x8d 141 VER2 NTSC -* 0xe2 226 HC226 (short line, selected if LOL=1, NTSC only) -* 0xe3 227 HC227 (NTSC long line/PAL) +* 0x00 0 HC0 (genlock handling) +* 0x01 1 HC1 (START), (VSY serration pulse start) +* 0x09 9 VR1 (LOF=0 -> VE start, LOF=1 -> VE stop) +* 0x12 18 SHS ([HSSTRT] horizontal sync start), (VSY serration pulse end) +* 0x1a 26 VER1_P (HSY end of equalization pulse in PAL) +* 0x1b 27 VER1_N (HSY end of equalization pulse in NTSC) +* 0x23 35 RHS ([HSSTOP] horizontal sync end) +* 0x73 115 VR2 (LOF=1 -> VE start, LOF=0 -> VE stop), (VSY serration pulse start) +* 0x84 132 CEN ([HCENTER]), (VSY serration pulse end) +* 0x8c 140 VER2_P (CEN end of equalization pulse in PAL) +* 0x8d 141 VER2_N (CEN end of equalization pulse in NTSC) +* 0xe2 226 HC226 (LOL=0, [HTOTAL] PAL line, NTSC short line) +* 0xe3 227 HC227 (LOL=1, NTSC long line) * -* SHS->VER1 = CSYNC equalising pulse 1 -* CEN->VER2 = CSYNC equalising pulse 2 -* -* HC1->SHS = Inactivate part of CSYNC Vsync+Hsync pulse 1 -* VR2->CEN = Inactivate part of CSYNC Vsync+HSync pulse 2 +* Vertical hardwired defaults * +* 0 SVB (start for Vertical Equalization zone) +* 2 VC2 (PAL/CEN/LOF=0 -> enable Vertical Sync zone) +* 3 VC3 (NTSC + PAL/SHS/LOF=1 enable Vertical Sync zone) +* 5 VC5 (PAL/SHS/LOF=0 + PAL/CEN/LOF=1 -> disable Vertical Sync zone) +* 6 VC6 (NTSC disable Vertical Sync zone) +* 7 VC7 (PAL LOF=0 stop for Vertical Equalization zone) +* 8 VC8 (PAL LOF=1 stop for Vertical Equalization zone) +* 9 VC9 (NTSC stop for Vertical Equalization zone) +* 20 RVB_N ([VBSTOP] NTSC) +* 25 RVB_P ([VBSTOP] PAL) +* 261 VC261 ([VBSTRT][VTOTAL] LOF=0, NTSC short frame) +* 262 VC262 ([VBSTRT] LOF=1, NTSC long frame) +* 311 VC311 ([VBSTRT][VTOTAL] LOF=0, PAL short frame) +* 312 VC312 ([VBSTRT] LOF=1, PAL long frame) +*/ + + +/* + +* Odd field: * -* Vertical defaults -* * PAL -* -* 0 SVB -* 2 VC2 -* 3 VC3 -* 5 VC5 -* 7 VC7 -* 8 VC8 -* 25 RVB (Vertical blank end) -* 311 VC311 short field (Vertical blank start) -* 312 VC312 long field (Vertical blank start) -* -* Odd field: * * HSYNC SHS to RHS * VSYNC VC2/CEN to VC5/SHS @@ -261,14 +448,6 @@ static uae_u32 cop1lc, cop2lc, copcon; * * NTSC * -* 0 SVB -* 3 VC3 -* 6 VC6 -* 9 VC9 -* 20 RVB (Vertical blank end) -* 261 VC261 short field (Vertical blank start) -* 262 VC262 long field (Vertical blank start) -* * Odd field: * * HSYNC SHS to RHS @@ -307,6 +486,18 @@ static uae_u32 cop1lc, cop2lc, copcon; * */ +static bool agnus_phsync, agnus_phblank; +static uae_u32 agnus_phblank_start, agnus_phblank_end, agnus_phsync_start, agnus_phsync_end, agnus_hsync_start, agnus_hsync_end; +static bool agnus_pvsync, agnus_pcsync, agnus_csync; +static int agnus_vb, agnus_pvb; +static bool agnus_vb_active; +static bool agnus_vb_start_line, agnus_pvb_start_line, agnus_vb_active_start_line; +static bool agnus_vb_end_line, agnus_pvb_end_line, agnus_vb_active_end_line; +static bool agnus_equzone; +static bool agnus_hsync, agnus_vsync, agnus_ve, agnus_p_ve; +static bool agnus_bsvb, agnus_bsvb_prev; +static bool agnus_equdis; + int maxhpos = MAXHPOS_PAL; int maxhpos_short = MAXHPOS_PAL; @@ -315,14 +506,14 @@ int maxvpos_nom = MAXVPOS_PAL; // nominal value (same as maxvpos but "faked" max int maxvpos_display = MAXVPOS_PAL; // value used for display size int maxhpos_display = AMIGA_WIDTH_MAX; int maxvsize_display = AMIGA_HEIGHT_MAX; -int maxvpos_display_vsync; // extra lines from top visible in bottom +int maxvpos_display_vsync; +int vsync_startline; static bool maxvpos_display_vsync_next; -static int vblank_extraline; static int maxhposm1; int maxhposm0 = MAXHPOS_PAL; -static bool maxhposeven, maxhposeven_prev; +static bool maxhposeven; static int hsyncendpos, hsyncstartpos; -int hsync_end_left_border; +int hsync_end_left_border, hdisplay_left_border; static int hsyncstartpos_start, hsyncstartpos_start_cycles; static int hsyncstartpos_start_hw; @@ -333,9 +524,6 @@ int denisehtotal; static int maxvpos_total = 511; int minfirstline = VBLANK_ENDLINE_PAL; int minfirstline_linear = VBLANK_ENDLINE_PAL; -static int firstblankedline; -static int equ_vblank_endline = EQU_ENDLINE_PAL; -static bool equ_vblank_toggle = true; float vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz, vblank_hz_stored, vblank_hz_nom; float hblank_hz; static float vblank_hz_lof, vblank_hz_shf, vblank_hz_lace; @@ -346,11 +534,16 @@ int programmedmode; frame_time_t syncbase; static int fmode_saved, fmode; uae_u16 beamcon0, new_beamcon0; +static bool beamcon0_dual, beamcon0_pal; uae_u16 bemcon0_hsync_mask, bemcon0_vsync_mask; +bool beamcon0_has_hsync, beamcon0_has_vsync, beamcon0_has_csync; static uae_u16 beamcon0_saved; static uae_u16 bplcon0_saved, bplcon1_saved, bplcon2_saved; static uae_u16 bplcon3_saved, bplcon4_saved; +static uae_u16 ddfstrt_saved, ddfstop_saved, diwhigh_saved; +static uae_u32 saved_color_regs_aga[32]; static int varsync_changed, varsync_maybe_changed[2]; +static bool programmed_register_accessed; static int varhblank_lines, varhblank_val[2]; static int exthblank_lines[2]; static uae_u16 vt_old, ht_old, hs_old, vs_old; @@ -358,34 +551,24 @@ uae_u16 vtotal, htotal; static int maxvpos_stored, maxhpos_stored; uae_u16 hsstop, hsstrt; uae_u16 hbstop, hbstrt; +static int hbstop_cck, hbstrt_cck; static int hsstop_detect, hsstop_detect2; static uae_u16 vsstop, vsstrt; static uae_u16 vbstop, vbstrt; -static uae_u16 hcenter, hcenter_v2, hcenter_v2_end, hcenter_sync_v2; -static bool hcenter_active; -static uae_u16 hbstop_v, hbstrt_v, hbstop_v2, hbstrt_v2, hbstop_sync_v2, hbstrt_sync_v2, hbstop_reg, hbstrt_reg; +static uae_u16 hcenter; static uae_u16 hsstrt_v2, hsstop_v2; -static int vsstrt_m, vsstop_m, vbstrt_m, vbstop_m; -static bool vb_state, vb_end_line; -static bool vs_state_var, vs_state_on, vs_state_on_old, vs_state_hw, vs_state_var_old; -static bool vb_end_next_line, vb_end_next_line2; -static int vb_start_line; static bool ocs_blanked; -static uae_u16 sprhstrt, sprhstop, bplhstrt, bplhstop, hhpos, hhpos_hpos; +static uae_u16 sprhstrt, sprhstop, bplhstrt, bplhstop, hhpos; +static bool uhres_spr, uhres_bpl; +static int uhres_state; static uae_u16 sprhstrt_v, sprhstop_v, bplhstrt_v, bplhstop_v; -static int hhbpl, hhspr; +static uaecptr hhbpl, hhspr; +static uae_s16 bplhmod; static int ciavsyncmode; static int diw_hstrt, diw_hstop; -static int hdiw_counter; -static int hstrobe_hdiw_min; static uae_u32 ref_ras_add; static uaecptr refptr, refptr_p; static uae_u32 refmask; -static int refresh_handled_slot; -static bool refptr_preupdated; -static bool hstrobe_conflict; -static uae_u16 strobe_vblank; -static bool vhposw_modified; static int line_disabled; static bool custom_disabled; @@ -393,66 +576,38 @@ static bool custom_disabled; struct sprite { uaecptr pt; - int xpos; int vstart; int vstop; - int dblscan; /* AGA SSCAN2 */ - int armed; + bool dblscan; /* AGA SSCAN2 */ int dmastate; int dmacycle; - int width; - bool ecs_denise_hires; bool firstslotdone; uae_u16 ctl, pos; -#ifdef AGA - uae_u16 data[4], datb[4]; -#else - uae_u16 data[1], datb[1]; -#endif }; static struct sprite spr[MAX_SPRITES]; static int plfstrt_sprite; -static int sprbplconflict, sprbplconflict_hpos; -static int sprbplconflict2, sprbplconflict_hpos2; -static uae_u16 sprbplconflict_dat; uaecptr sprite_0; int sprite_0_width, sprite_0_height, sprite_0_doubled; uae_u32 sprite_0_colors[4]; static uae_u8 magic_sprite_mask = 0xff; -static int hardwired_vbstrt, hardwired_vbstop; - -static int last_sprite_point, last_sprite_point_abs; -static int nr_armed; -static int sprite_width, sprres; +static int sprite_width; static int sprite_sprctlmask; int sprite_buffer_res; -uae_u8 cycle_line_slot[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; -uae_u16 cycle_line_pipe[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; -static uae_u8 cycle_line_slot_last; - -static uae_s16 bpl1mod, bpl2mod, bpl1mod_prev, bpl2mod_prev; -static int bpl1mod_hpos, bpl2mod_hpos; +static uae_s16 bpl1mod, bpl2mod; static uaecptr prevbpl[2][MAXVPOS][MAX_PLANES]; static uaecptr bplpt[MAX_PLANES], bplptx[MAX_PLANES]; -static struct color_entry current_colors; uae_u16 bplcon0; static uae_u16 bplcon1, bplcon2, bplcon3, bplcon4; -static int bplcon0d, bplcon0d_old; -static bool bplcon0d_change; static uae_u32 bplcon0_res, bplcon0_planes, bplcon0_planes_limit; static int diwstrt, diwstop, diwhigh; static int diwhigh_written; -static int ddfstrt, ddfstop, plfstop_prev; -static int ddfstrt_hpos, ddfstop_hpos; -static int line_cyclebased, diw_change; -static int bpl_shifter; - -static void SET_LINE_CYCLEBASED(int hpos); +static uae_u16 ddfstrt, ddfstop, ddf_mask; +static int diw_change; /* The display and data fetch windows */ @@ -461,9 +616,7 @@ enum class diw_states DIW_waiting_start, DIW_waiting_stop }; -static int plffirstline, plflastline; int plffirstline_total, plflastline_total; -int vblank_firstline_hw; static int autoscale_bordercolors; static int plfstrt, plfstop; static int sprite_minx; @@ -474,15 +627,11 @@ static int diwfirstword, diwlastword; static int last_diwlastword; static int hb_last_diwlastword; static int last_hdiw; -static diw_states vdiwstate, hdiwstate, hdiwstate_blank; +static diw_states vdiwstate, hdiwstate; static int hdiwbplstart; static int bpl_hstart; -static bool exthblank, exthblank_prev, exthblank_state, hcenterblank_state; +static bool exthblank; static int hsyncdebug; -static int last_diw_hpos; -static int last_recorded_diw_hpos; -static int last_hblank_start; -static int collision_hpos; int first_planes_vpos, last_planes_vpos; static int first_bplcon0, first_bplcon0_old; @@ -494,11 +643,10 @@ static int ddffirstword_total_old, ddflastword_total_old; bool vertical_changed, horizontal_changed; int firstword_bplcon1; -static int last_copper_hpos; static int copper_access; -/* Sprite collisions */ -static unsigned int clxdat, clxcon, clxcon2, clxcon_bpl_enable, clxcon_bpl_match; +uae_u16 clxdat; +static uae_u16 clxcon, clxcon2; enum copper_states { COP_stop, @@ -513,15 +661,17 @@ enum copper_states { COP_wait, COP_skip, COP_skip1, + COP_strobe_vbl_delay, + COP_strobe_vbl_delay2, + COP_strobe_vbl_extra_delay1, + COP_strobe_vbl_extra_delay2, + COP_strobe_vbl_extra_delay3, + COP_strobe_delay_start, + COP_strobe_delay_start_odd, COP_strobe_delay1, + COP_strobe_delay1_odd, COP_strobe_delay2, - COP_strobe_delay3, - COP_strobe_delay4, - COP_strobe_delay5, - COP_strobe_delay1x, - COP_strobe_delay2x, - COP_strobe_extra, // just to skip current cycle when CPU wrote to COPJMP - COP_start_delay + COP_strobe_extra // just to skip current cycle when CPU wrote to COPJMP }; struct copper { @@ -530,27 +680,22 @@ struct copper { enum copper_states state, state_prev; /* Instruction pointer. */ uaecptr ip; + uaecptr strobeip; // following move does not enable COPRS int ignore_next; int vcmp, hcmp; int strobe; /* COPJMP1 / COPJMP2 accessed */ - int last_strobe; + int strobetype; + enum copper_states strobe_next; int moveaddr, movedata, movedelay; uaecptr moveptr; uaecptr vblankip; + evt_t strobe_cycles; }; static struct copper cop_state; static int copper_enabled_thisline; -static evt_t copper_bad_cycle; -static uaecptr copper_bad_cycle_pc_old; -static evt_t copper_bad_cycle_start; -static uaecptr copper_bad_cycle_pc_new; - -static evt_t copper_dma_change_cycle; -static evt_t blitter_dma_change_cycle; -static evt_t sprite_dma_change_cycle_on, sprite_dma_change_cycle_off; /* * Statistics @@ -561,123 +706,23 @@ frame_time_t lastframetime; uae_u32 hsync_counter, vsync_counter; frame_time_t idletime; int bogusframe; -static int display_vsync_counter; - -/* Recording of custom chip register changes. */ -static int current_change_set; -#define MAX_SPRITE_ENTRIES ((MAXVPOS + MAXVPOS_WRAPLINES) * 16) -static struct sprite_entry sprite_entries[2][MAX_SPRITE_ENTRIES]; -static struct color_change color_changes[2][MAX_REG_CHANGE]; +static int display_vsync_counter, display_hsync_counter; +static evt_t display_last_hsync, display_last_vsync; -struct decision line_decisions[2 * (MAXVPOS + MAXVPOS_WRAPLINES) + 1]; -static struct draw_info line_drawinfo[2][2 * (MAXVPOS + MAXVPOS_WRAPLINES) + 1]; -#define COLOR_TABLE_SIZE (MAXVPOS + MAXVPOS_WRAPLINES) * 2 -static struct color_entry color_tables[2][COLOR_TABLE_SIZE]; +static int fetch_cycle; -static int next_sprite_entry = 0, end_sprite_entry; -static int prev_next_sprite_entry; -static int next_sprite_forced = 1; -static int spixels_max; - -struct sprite_entry *curr_sprite_entries, *prev_sprite_entries; -struct color_change *curr_color_changes, *prev_color_changes; -struct draw_info *curr_drawinfo, *prev_drawinfo; -struct color_entry *curr_color_tables, *prev_color_tables; - -static int next_color_change, last_color_change; -static int next_color_entry, remembered_color_entry; -static int color_src_match, color_dest_match, color_compare_result; - -static uae_u32 thisline_changed; - -#ifdef SMART_UPDATE -#define MARK_LINE_CHANGED do { thisline_changed = 1; } while (0) -#else -#define MARK_LINE_CHANGED do { ; } while (0) -#endif - -static struct decision thisline_decision; -static int fetch_cycle, fetch_modulo_cycle; - -static bool ddf_limit, ddf_limit_latch, ddfstrt_match, hwi_old; +static bool ddf_limit, ddfstrt_match, hwi_old; static int ddf_stopping, ddf_enable_on; -static int bprun, bprun_end; +static int bprun; +static evt_t bprun_end; static int bprun_cycle; -static int bprun_pipeline_flush_delay; -static bool plane0, plane0p, plane0p_enabled, plane0p_forced, plane0_first_done; -static int last_bpl1dat_hpos; -static bool last_bpl1dat_hpos_early; static bool harddis_v, harddis_h; -static uae_u16 dmal_alloc_mask; - -#define RGA_PIPELINE_OFFSET_BPL_WRITE 3 -#define RGA_PIPELINE_OFFSET_COPPER 2 -#define RGA_PIPELINE_OFFSET_SPRITE 2 -#define RGA_PIPELINE_OFFSET_DMAL 2 struct custom_store custom_storage[256]; -#define TOSCR_RES_PIXELS_LORES 4 -#define TOSCR_RES_PIXELS_HIRES 2 -#define TOSCR_RES_PIXELS_SHRES 1 - -#define TOSCR_NBITS 16 -#define TOSCR_NBITSHR 32 - -static int out_nbits, out_offs; -static uae_u32 todisplay[MAX_PLANES], todisplay2[MAX_PLANES]; -static uae_u32 outword[MAX_PLANES]; -static uae_u64 outword64[MAX_PLANES], outword64_extra[MAX_PLANES]; -static uae_u16 fetched[MAX_PLANES]; -static uae_u16 todisplay_fetched; -#ifdef AGA -static uae_u64 todisplay_aga[MAX_PLANES], todisplay2_aga[MAX_PLANES]; -static bool todisplay2_lastbit[MAX_PLANES]; -static uae_u64 fetched_aga[MAX_PLANES]; -static uae_u32 fetched_aga_spr[MAX_PLANES]; -#endif +static uae_u16 dmal; -/* Expansions from bplcon0/bplcon1. */ -static int toscr_res2p, toscr_res_mult; -static int toscr_res, toscr_res_old; -static int toscr_res_pixels, toscr_res_pixels_shift, toscr_res_pixels_shift_old; -static int toscr_res_pixels_hr, toscr_res_pixels_shift_hr, toscr_res_pixels_mask_hr, toscr_res_pixels_mask_hr_old, toscr_res_pixels_mask_hr2; -static int toscr_nr_planes, toscr_nr_planes2, toscr_nr_planes3, toscr_nr_planes_agnus; -static bool toscr_nr_changed; -static int toscr_nr_planes_shifter, toscr_nr_planes_shifter_new; -static int fetchwidth; -static int toscr_delay_adjusted[2], toscr_delay_sh[2]; -static bool shdelay_disabled; -static int delay_cycles, delay_cycles2; -static int delay_lastcycle[2], delay_hsynccycle; -static int vhposr_delay_offset; -static bool bplcon1_written; -static bool bplcon0_planes_changed; -static bool sprites_enabled_this_line; -static int shifter_mask, toscr_delay_shifter[2]; -static int out_subpix[2]; -static bool speedup_first; - -static void events_dmal(int); -static uae_u16 dmal, dmal_hpos; -static uae_u16 dmal_htotal_mask; -static bool dmal_ce; - -static void update_copper(int until_hpos); -static void decide_sprites_fetch(int endhpos); -static void decide_line(int endhpos); -static void decide_sprites(int hpos, bool quick, bool halfcycle); -static void decide_sprites(int hpos); - -/* The number of bits left from the last fetched words. -This is an optimization - conceptually, we have to make sure the result is -the same as if toscr is called in each clock cycle. However, to speed this -up, we accumulate display data; this variable keeps track of how much. -Thus, once we do call toscr_nbits (which happens at least every 16 bits), -we can do more work at once. */ -static int toscr_nbits; - -static int REGPARAM3 custom_wput_1(int, uaecptr, uae_u32, int) REGPARAM; +static int REGPARAM3 custom_wput_1(uaecptr, uae_u32, int) REGPARAM; /* * helper functions @@ -700,11 +745,6 @@ static void check_nocustom(void) } } -STATIC_INLINE bool ecsshres(void) -{ - return bplcon0_res == RES_SUPERHIRES && ecs_denise && !aga_mode; -} - STATIC_INLINE bool nodraw(void) { struct amigadisplay *ad = &adisplays[0]; @@ -712,24 +752,6 @@ STATIC_INLINE bool nodraw(void) return nd; } -STATIC_INLINE int diw_to_hpos(int diw) -{ - diw /= 4; - diw += DDF_OFFSET; - diw /= 2; - return diw; -} - -STATIC_INLINE int hpos_to_diw(int pos) -{ - return (pos * 2 - DDF_OFFSET) * 4; -} - -STATIC_INLINE int hpos_to_diwx(int pos) -{ - return ((pos + hpos_hsync_extra) * 2 - DDF_OFFSET) * 4; -} - static bool doflickerfix_possible(void) { return currprefs.gfx_vresolution && doublescan < 0 && vpos < MAXVPOS; @@ -801,119 +823,6 @@ STATIC_INLINE bool is_last_line(void) return vpos + 1 == maxvpos + lof_store; } -static void alloc_cycle(int hpos, int type) -{ -#ifdef CPUEMU_13 -#if CYCLE_CONFLICT_LOGGING - if (cycle_line_slot[hpos] && cycle_line_slot[hpos] != type) { - write_log(_T("alloc cycle conflict %d: %02x <- %02x\n"), hpos, type, cycle_line_slot[hpos]); - } -#endif - cycle_line_slot[hpos] = type; -#endif -} -static void alloc_cycle_maybe(int hpos, int type) -{ - if ((cycle_line_slot[hpos] & CYCLE_MASK) == 0) { - alloc_cycle(hpos, type); - } -} - -void alloc_cycle_ext(int hpos, int type) -{ - alloc_cycle(hpos, type); -} - -uaecptr alloc_cycle_blitter_conflict_or(int hpos, int chnum, bool *skip) -{ - uaecptr orptr = 0; - if (copper_bad_cycle && line_start_cycles + hpos * CYCLE_UNIT == copper_bad_cycle) { - orptr = copper_bad_cycle_pc_old; - } else if (hpos == sprbplconflict_hpos2) { - uae_u16 bltdat = chnum == 4 ? 0x000 : (3 - chnum) * 2 + 0x70; - uae_u16 rga = bltdat & sprbplconflict2; - int spnum = (sprbplconflict2 - 0x140) / 8; - orptr = spr[spnum].pt; - if (rga != bltdat) { - *skip = true; - } - } - return orptr; -} - -bool alloc_cycle_blitter(int hpos, uaecptr *ptr, int chnum, int add) -{ - bool skipadd = false; - if (copper_bad_cycle && line_start_cycles + hpos * CYCLE_UNIT == copper_bad_cycle) { - write_log("Copper PT=%08x/%08x. Blitter CH=%d MOD=%d PT=%08x. Conflict bug!\n", copper_bad_cycle_pc_old, copper_bad_cycle_pc_new, chnum, add, *ptr); - cop_state.ip += add; - *ptr = copper_bad_cycle_pc_old; - skipadd = true; - copper_bad_cycle = 0; - } else if (hpos == sprbplconflict_hpos2) { - uae_u16 v = chipmem_wget_indirect(*ptr); - uae_u16 bltdat = chnum == 4 ? 0x000 : (3 - chnum) * 2 + 0x70; - uae_u16 rga = bltdat & sprbplconflict2; - int spnum = (sprbplconflict2 - 0x140) / 8; - uaecptr pt = spr[spnum].pt; - spr[spnum].pt = *ptr + 2 + add; - custom_wput_1(hpos, rga, v, 1); - sprbplconflict_hpos2 = -1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(v); - record_dma_read(rga, *ptr, hpos, vpos, DMARECORD_SPRITE, spnum); - } -#endif - write_log("Sprite %d. Blitter CH=%d MOD=%d PT=%08x. Conflict bug!\n", spnum, chnum, add, *ptr); - } - alloc_cycle(hpos, CYCLE_BLITTER); - return skipadd; -} - -static int expand_sprres(uae_u16 con0, uae_u16 con3) -{ - int res; - - switch ((con3 >> 6) & 3) - { - default: - res = RES_LORES; - break; -#ifdef ECS_DENISE - case 0: /* ECS defaults (LORES,HIRES=LORES sprite,SHRES=HIRES sprite) */ - if (ecs_denise && GET_RES_DENISE(con0) == RES_SUPERHIRES) - res = RES_HIRES; - else - res = RES_LORES; - break; -#endif -#ifdef AGA - case 1: - res = RES_LORES; - break; - case 2: - res = RES_HIRES; - break; - case 3: - res = RES_SUPERHIRES; - break; -#endif - } - return res; -} - -static int islinetoggle(void) -{ - int linetoggle = 0; - if (!(new_beamcon0 & BEAMCON0_LOLDIS) && !(new_beamcon0 & BEAMCON0_PAL) && ecs_agnus) { - linetoggle = 1; // NTSC and !LOLDIS -> LOL toggles every line - } else if (!ecs_agnus && currprefs.ntscmode) { - linetoggle = 1; // hardwired NTSC Agnus - } - return linetoggle; -} - STATIC_INLINE uae_u8 *pfield_xlateptr(uaecptr plpt, int bytecount) { if (!chipmem_check_indirect(plpt, bytecount)) { @@ -946,15659 +855,10550 @@ static void docols(struct color_entry *colentry) #endif } -static void remember_ctable(void) -{ - /* This can happen when program crashes very badly */ - if (next_color_entry >= COLOR_TABLE_SIZE) { - return; - } - if (remembered_color_entry < 0) { - /* The colors changed since we last recorded a color map. Record a - * new one. */ - color_reg_cpy(curr_color_tables + next_color_entry, ¤t_colors); - remembered_color_entry = next_color_entry++; - } - thisline_decision.ctable = remembered_color_entry; - if (color_src_match < 0 || color_dest_match != remembered_color_entry - || line_decisions[next_lineno].ctable != color_src_match) - { - /* The remembered comparison didn't help us - need to compare again. */ - int oldctable = line_decisions[next_lineno].ctable; - int changed = 0; - - if (oldctable < 0) { - changed = 1; - color_src_match = color_dest_match = -1; - } else { - color_compare_result = color_reg_cmp(&prev_color_tables[oldctable], ¤t_colors) != 0; - if (color_compare_result) { - changed = 1; - } - color_src_match = oldctable; - color_dest_match = remembered_color_entry; - } - thisline_changed |= changed; - } else { - /* We know the result of the comparison */ - if (color_compare_result) { - thisline_changed = 1; - } - } -} +/* The fetch unit mainly controls ddf stop. It's the number of cycles that +are contained in an indivisible block during which ddf is active. E.g. +if DDF starts at 0x30, and fetchunit is 8, then possible DDF stops are +0x30 + n * 8. */ +static uae_u32 fetchunit, fetchunit_mask; +/* The delay before fetching the same bitplane again. Can be larger than +the number of bitplanes; in that case there are additional empty cycles +with no data fetch (this happens for high fetchmodes and low +resolutions). */ +static uae_u32 fetchstart, fetchstart_shift, fetchstart_mask; +/* fm_maxplane holds the maximum number of planes possible with the current +fetch mode. This selects the cycle diagram: +8 planes: 73516240 +4 planes: 3120 +2 planes: 10. */ +static uae_u32 fm_maxplane, fm_maxplane_shift; -static void remember_ctable_for_border(void) -{ - remember_ctable(); -} +/* The corresponding values, by fetchmode and display resolution. */ +static const uae_u8 fetchunits[] = { 8,8,8,0, 16,8,8,0, 32,16,8,0 }; +static const uae_u8 fetchstarts[] = { 3,2,1,0, 4,3,2,0, 5,4,3,0 }; +static const uae_u8 fm_maxplanes[] = { 3,2,1,0, 3,3,2,0, 3,3,3,0 }; -static int get_equ_vblank_endline(void) -{ - if (new_beamcon0 & (BEAMCON0_BLANKEN | BEAMCON0_VARCSYEN)) { - return -1; - } - return equ_vblank_endline + (equ_vblank_toggle ? (lof_store ? 1 : 0) : 0) + (agnusa1000 ? 1 : 0); -} -static int get_equ_vblank_startline(void) -{ - if (new_beamcon0 & (BEAMCON0_BLANKEN | BEAMCON0_VARCSYEN)) { - return 30000; - } - if (agnusa1000) { - return 1; - } else { - return 0; - } -} +static uae_s8 cycle_diagram_table[3][3][9][32]; +static uae_s8 cycle_diagram_free_cycles[3][3][9]; +static uae_s8 cycle_diagram_total_cycles[3][3][9]; +static uae_s8 *curr_diagram; +static const uae_s8 cycle_sequences[3 * 8] = { 2,1,2,1,2,1,2,1, 4,2,3,1,4,2,3,1, 8,4,6,2,7,3,5,1 }; -static int output_res(int res) -{ - if (currprefs.chipset_hr && res < currprefs.gfx_resolution) { - return currprefs.gfx_resolution; - } - return res; -} +static int fetchmode, fetchmode_size, fetchmode_mask, fetchmode_bytes; +static int fetchmode_fmode_bpl, fetchmode_fmode_spr; +static int real_bitplane_number[3][3][9]; -static void reset_bpl_vars() +/* Disable bitplane DMA if planes > available DMA slots. This is needed +e.g. by the Sanity WOC demo (at the "Party Effect"). */ +STATIC_INLINE int GET_PLANES_LIMIT(uae_u16 bc0) { - out_subpix[0] = 0; - out_subpix[1] = 0; - out_nbits = 0; - out_offs = 0; - toscr_nbits = 0; - thisline_decision.bplres = output_res(bplcon0_res); + int res = GET_RES_AGNUS(bc0); + int planes = GET_PLANES(bc0); + return real_bitplane_number[fetchmode][res][planes]; } -STATIC_INLINE bool line_hidden(void) +static void debug_cycle_diagram(void) { - return linear_vpos >= maxvpos_display_vsync && linear_vpos < minfirstline - 1 && currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA; -} + int fm, res, planes, cycle, v; + TCHAR aa; -// hblank start = enable border (bitplane not visible until next BPL1DAT).. -static void hblank_reset(int hblankpos) -{ - if (thisline_decision.plfleft < 0) { - return; + for (fm = 0; fm <= 2; fm++) { + write_log(_T("FMODE %d\n=======\n"), fm); + for (res = 0; res <= 2; res++) { + for (planes = 0; planes <= 8; planes++) { + write_log(_T("%d: "), planes); + for (cycle = 0; cycle < 32; cycle++) { + v = cycle_diagram_table[fm][res][planes][cycle]; + if (v == 0) aa = '-'; else if (v > 0) aa = '1'; else aa = 'X'; + write_log(_T("%c"), aa); + } + write_log(_T(" %d:%d\n"), cycle_diagram_free_cycles[fm][res][planes], cycle_diagram_total_cycles[fm][res][planes]); + } + write_log(_T("\n")); + } } - // border re-enable takes 1 lores pixel - hb_last_diwlastword = hblankpos + 4; -} - -static void addcc(int pos, int reg, int v) -{ - color_change *cc = &curr_color_changes[next_color_change++]; - cc->linepos = pos; - cc->regno = reg; - cc->value = v; - cc++; - cc->regno = -1; + fm = 0; } -static void addccmp(int pos, int reg, int v, int chpos) +static void create_cycle_diagram_table(void) { - if (pos < chpos && pos >= last_recorded_diw_hpos) { - addcc(pos, reg, v); - } -} + int fm, res, cycle, planes, rplanes, v; + int fetch_start, max_planes, freecycles; + const uae_s8 *cycle_sequence; -#ifdef DEBUGGER -static void syncdebugmarkers(int chpos) -{ - bool pal = (beamcon0 & BEAMCON0_PAL) != 0; - if (hsyncdebug == 3) { - // CSYNC - int con = 1; - int coff = 0; - if (beamcon0 & BEAMCON0_CSYTRUE) { - con = 0; - coff = 1; - } - bool varcsy = (beamcon0 & BEAMCON0_VARCSYEN) != 0; - bool blanken = (beamcon0 & BEAMCON0_BLANKEN) != 0; - int hc1 = 1 + maxhpos; - hc1 <<= CCK_SHRES_SHIFT; - int nline = pal ? 8 : 10; - addccmp(hbstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x204, 1, chpos); - addccmp(hbstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x204, 0, chpos); - if (blanken) { - addccmp(hbstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hbstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } else if (!varcsy) { - int ver1 = pal ? 26 : 27; - int ver2 = pal ? 140 : 141; - int vr2 = 115; - ver1 <<= CCK_SHRES_SHIFT; - ver2 <<= CCK_SHRES_SHIFT; - vr2 <<= CCK_SHRES_SHIFT; - if (vpos >= nline) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } - if (pal) { - // PAL - if (lof_display) { - // EVEN - if (vpos == 0) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 1 || vpos == 2 || vpos == 6 || vpos == 7) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 3 || vpos == 4) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 5) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - } else { - // ODD - if (vpos == 0 || vpos == 1 || vpos == 5 || vpos == 6) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 2) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 3 || vpos == 4) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 7) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } + for (fm = 0; fm <= 2; fm++) { + for (res = 0; res <= 2; res++) { + max_planes = fm_maxplanes[fm * 4 + res]; + fetch_start = 1 << fetchstarts[fm * 4 + res]; + cycle_sequence = &cycle_sequences[(max_planes - 1) * 8]; + max_planes = 1 << max_planes; + for (planes = 0; planes <= 8; planes++) { + freecycles = 0; + for (cycle = 0; cycle < 32; cycle++) { + cycle_diagram_table[fm][res][planes][cycle] = -1; } - } else { - // NTSC - if (lof_display) { - // EVEN - if (vpos == 0) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 1 || vpos == 2 || vpos == 7 || vpos == 8 || vpos == 9) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 4 || vpos == 5) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 3) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 6) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - } else { - // ODD - if (vpos == 0 || vpos == 1 || vpos == 2 || vpos == 6 || vpos == 7 || vpos == 8) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 3) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(ver1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 4 || vpos == 5) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(vr2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hc1, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; - } - if (vpos == 9) { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - thisline_changed = 1; + if (planes <= max_planes) { + for (cycle = 0; cycle < fetch_start; cycle++) { + if (cycle < max_planes && planes >= cycle_sequence[cycle & 7]) { + v = cycle_sequence[cycle & 7]; + } else { + v = -1; + freecycles++; + } + cycle_diagram_table[fm][res][planes][cycle] = v; } } - } - } else { - if (vs_state_var && !vs_state_var_old && lof_display) { - // First VS=1 line, LOF=1: VS=1 at HCENTER start - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - if (hsstop_v2 < hcenter_sync_v2) { - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } - if (hbstrt_sync_v2 >= hcenter_sync_v2) { - addccmp(hbstrt_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } - if (hbstop_sync_v2 >= hcenter_sync_v2) { - addccmp(hbstop_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } - addccmp(hcenter_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - thisline_changed = 1; - } else if (vs_state_var) { - addccmp(hbstrt_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hbstop_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hcenter_sync_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - thisline_changed = 1; - } else { - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, con, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, coff, chpos); - } - } - } else { - // H/V SYNC - int hon = 1; - int hoff = 0; - if (beamcon0 & BEAMCON0_HSYTRUE) { - hon = 0; - hoff = 1; - } - if (hcenter_v2 < chpos && hcenter_v2 >= last_recorded_diw_hpos) { - if (pal) { - if (vs_state_var && !lof_display) { - addcc(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x206, 0); - } else if (!vs_state_var && vs_state_var_old && lof_display) { - addcc(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x206, 1); + cycle_diagram_free_cycles[fm][res][planes] = freecycles; + cycle_diagram_total_cycles[fm][res][planes] = fetch_start; + rplanes = planes; + if (rplanes > max_planes) { + rplanes = 0; } - } else { - if (vs_state_var && lof_display) { - addcc(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x206, 0); - } else if (!vs_state_var && vs_state_var_old && lof_display) { - addcc(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x206, 1); + if (rplanes == 7 && fm == 0 && res == 0 && !aga_mode) { + rplanes = 4; } + real_bitplane_number[fm][res][planes] = rplanes; } } - addccmp(hsstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, hon, chpos); - addccmp(hsstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x202, hoff, chpos); - addccmp(hbstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x204, 1, chpos); - addccmp(hbstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x204, 0, chpos); } -} +#if 0 + debug_cycle_diagram(); #endif +} + +/* fetchstart_mask can be larger than fm_maxplane if FMODE > 0. + This means that the remaining cycles are idle. + */ +static const uae_u8 bpl_sequence_8[32] = { 8, 4, 6, 2, 7, 3, 5, 1 }; +static const uae_u8 bpl_sequence_4[32] = { 4, 2, 3, 1 }; +static const uae_u8 bpl_sequence_2[32] = { 2, 1 }; +static const uae_u8 *bpl_sequence; -static void record_color_change2(int hpos, int regno, uae_u32 value) +/* set currently active Agnus bitplane DMA sequence */ +static void setup_fmodes(uae_u16 con0) { - if (line_disabled) { - return; + switch (fmode & 3) + { + case 0: + fetchmode = 0; + break; + case 1: + case 2: + fetchmode = 1; + break; + case 3: + fetchmode = 2; + break; } - - if (next_color_change > MAX_REG_CHANGE - 30) { - return; + bplcon0_res = GET_RES_AGNUS(con0); + bplcon0_planes = GET_PLANES(con0); + bplcon0_planes_limit = GET_PLANES_LIMIT(con0); + fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; + fetchunit_mask = fetchunit - 1; + fetchstart_shift = fetchstarts[fetchmode * 4 + bplcon0_res]; + fetchstart = 1 << fetchstart_shift; + fetchstart_mask = fetchstart - 1; + fm_maxplane_shift = fm_maxplanes[fetchmode * 4 + bplcon0_res]; + fm_maxplane = 1 << fm_maxplane_shift; + switch (fm_maxplane) { + default: + case 8: + bpl_sequence = bpl_sequence_8; + break; + case 4: + bpl_sequence = bpl_sequence_4; + break; + case 2: + bpl_sequence = bpl_sequence_2; + break; } + fetchmode_size = 16 << fetchmode; + fetchmode_bytes = 2 << fetchmode; + fetchmode_mask = fetchmode_size - 1; + fetchmode_fmode_bpl = fmode & 3; + fetchmode_fmode_spr = (fmode >> 2) & 3; + curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; +} - int pos = hpos < 0 ? -hpos : hpos_to_diwx(hpos); - int start_color_change = next_color_change; - - // AGA has extra hires pixel delay in color changes - if ((regno < RECORDED_REGISTER_CHANGE_OFFSET || regno == RECORDED_REGISTER_CHANGE_OFFSET + 0x10c || regno == RECORDED_REGISTER_CHANGE_OFFSET + 0x201) && aga_mode) { - if (currprefs.chipset_hr) { - pos += 2; - } - if (regno == RECORDED_REGISTER_CHANGE_OFFSET + 0x201) { - // EHB delay - pos += 2; - } - if (regno == RECORDED_REGISTER_CHANGE_OFFSET + 0x10c) { - // BPLCON4: - // Bitplane XOR change: 2 hires pixel delay - // Sprite bank change: 1 hires pixel delay - if (!currprefs.chipset_hr) { - pos += 2; - } - if (value & 0xff00) { - thisline_decision.xor_seen = true; - } - pos += 2; - if ((value & 0x00ff) != (bplcon4 & 0x00ff)) { - // Sprite bank delay - addcc(pos, regno | 1, value); - } - pos += 2; - } - } - // HCENTER blanking (ECS Denise only) - if (hcenter_active && vs_state_on && lof_display) { - int chpos = pos; - if (!hcenterblank_state && hcenter_v2 < chpos && hcenter_v2 >= last_recorded_diw_hpos) { - hcenterblank_state = true; - if ((bplcon0 & 1) && (bplcon3 & 1)) { - addcc(hcenter_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 1); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBS, diw_to_hpos(hcenter_v2), vpos); - } -#endif - thisline_changed = 1; - } +static void set_chipset_mode(bool imm) +{ + fmode = fmode_saved; + bplcon0 = bplcon0_saved; + bplcon1 = bplcon1_saved; + bplcon2 = bplcon2_saved; + bplcon3 = bplcon3_saved; + bplcon4 = bplcon4_saved; + ddfstrt = ddfstrt_saved & ddf_mask; + ddfstop = ddfstop_saved & ddf_mask; + diwhigh = diwhigh_saved; + diwhigh_written = (diwhigh & 0x8000) != 0; + diwhigh &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040); + if (!aga_mode) { + fmode = 0; + bplcon0 &= ~(0x0010 | 0x0020); + bplcon1 &= ~(0xff00); + bplcon2 &= ~(0x0100 | 0x0080); + bplcon3 &= 0x003f; + bplcon3 |= 0x0c00; + bplcon4 = 0x0011; + diwhigh &= ~(0x0010 | 0x1000); + if (!ecs_agnus) { + bplcon0 &= ~0x0080; + diwhigh = 0; + diwhigh_written = 0; } - if (hcenterblank_state && hcenter_v2_end < chpos && hcenter_v2_end >= last_recorded_diw_hpos) { - hcenterblank_state = false; - if ((bplcon0 & 1) && (bplcon3 & 1)) { - addcc(hcenter_v2_end, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 0); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBE, diw_to_hpos(hcenter_v2), vpos); - } -#endif - thisline_changed = 1; - } + if (!ecs_denise) { + bplcon0 &= ~0x0001; + bplcon2 &= 0x007f; + bplcon3 = 0x0c00; } } - - if (exthblank) { - int chpos = pos; - // inject programmed hblank start and end in color changes - if (hbstrt_v2 <= hbstop_v2) { - if (hbstrt_v2 < chpos && hbstrt_v2 >= last_recorded_diw_hpos) { - addcc(hbstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 1); - hblank_reset(hbstrt_v2); - exthblank_state = true; - last_hblank_start = hbstrt_v2; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBS, diw_to_hpos(hbstrt_v2), vpos); - } -#endif - } - if (hbstop_v2 < chpos && hbstop_v2 >= last_recorded_diw_hpos) { - // do_color_changes() HBLANK workaround - if (next_color_change == last_color_change && exthblank_state) { - addcc(0, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 1); - } - addcc(hbstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 0); - exthblank_state = false; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBE, diw_to_hpos(hbstop_v2), vpos); - } -#endif - } - } else if (hbstrt_v2 > hbstop_v2) { // equal: blank disable wins - if (hbstop_v2 < chpos && hbstop_v2 >= last_recorded_diw_hpos) { - if (next_color_change == last_color_change && exthblank_state) { - addcc(0, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 1); - } - addcc(hbstop_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 0); - exthblank_state = false; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBE, diw_to_hpos(hbstop_v2), vpos); - } -#endif - } - if (hbstrt_v2 < chpos && hbstrt_v2 >= last_recorded_diw_hpos) { - addcc(hbstrt_v2, RECORDED_REGISTER_CHANGE_OFFSET + 0x200, 1); - hblank_reset(hbstrt_v2); - exthblank_state = true; - last_hblank_start = hbstrt_v2; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HBS, diw_to_hpos(hbstrt_v2), vpos); - } -#endif - } + sprite_width = GET_SPRITEWIDTH(fmode); + refmask = 0x1fffff; + ref_ras_add = REF_RAS_ADD_AGA; + if (!aga_mode) { + ref_ras_add = REF_RAS_ADD_ECS; + refmask >>= 1; + if (!ecs_agnus) { + ref_ras_add = REF_RAS_ADD_OCS; + refmask >>= 1; } } - -#ifdef DEBUGGER - // inject hsync and end in color changes (ultra mode debug) - if (hsyncdebug) { - syncdebugmarkers(pos); - } -#endif - - if (regno != 0xffff) { - addcc(pos, regno, value); + if (imm || bplcon0 != bplcon0_saved) { + denise_update_reg(0x100, bplcon0); } - - if (pos > last_recorded_diw_hpos) { - last_recorded_diw_hpos = pos; + if (imm || bplcon1 != bplcon1_saved) { + denise_update_reg(0x102, bplcon1); } - -#ifdef DEBUGGER - int cchanges = next_color_change - start_color_change; - if (cchanges > 1 && hsyncdebug) { - if (cchanges == 2) { - color_change *cc1 = &curr_color_changes[start_color_change]; - color_change *cc2 = &curr_color_changes[start_color_change + 1]; - if (cc1->linepos > cc2->linepos) { - color_change cc = *cc2; - *cc2 = *cc1; - *cc1 = cc; - } - } else { - // debug only, can be slow - for (int i = 0; i < cchanges; i++) { - color_change *cc1 = &curr_color_changes[start_color_change + i]; - for(int j = i + 1; j < cchanges; j++) { - color_change *cc2 = &curr_color_changes[start_color_change + j]; - if (cc1->linepos > cc2->linepos) { - color_change cc = *cc2; - *cc2 = *cc1; - *cc1 = cc; - } - } - } - } + if (imm || bplcon2 != bplcon2_saved) { + denise_update_reg(0x104, bplcon2); } -#endif -} - -static void sync_color_changes(int hpos) -{ - record_color_change2(hpos, 0xffff, 0); -} - -static void insert_actborder(int diw, bool onoff, bool blank) -{ - if (custom_disabled) { - return; + if (imm || bplcon3 != bplcon3_saved) { + denise_update_reg(0x106, bplcon3); } - - int i; - // already exists? - for (i = last_color_change; i < next_color_change; i++) { - struct color_change *cc = &curr_color_changes[i]; - if (cc->linepos == diw && cc->regno == 0 && (cc->value & COLOR_CHANGE_MASK) == COLOR_CHANGE_ACTBORDER) { - cc->value = COLOR_CHANGE_ACTBORDER | (onoff ? 1 : 0) | (blank ? 2 : 0); - return; - } + if (imm || bplcon4 != bplcon4_saved) { + denise_update_reg(0x10c, bplcon4); } - // find slot to insert into - for (i = last_color_change; i < next_color_change; i++) { - struct color_change *cc = &curr_color_changes[i]; - if (cc->linepos > diw) { - break; + if (imm) { + denise_update_reg(0x8e, diwstrt); + if (diwhigh_written) { + denise_update_reg(0x1e4, diwhigh); } } - if (i < next_color_change) { - int num = next_color_change - i; - memmove(&curr_color_changes[i + 1], &curr_color_changes[i], sizeof(struct color_change) * num); + if (imm || fmode != fmode_saved) { + denise_update_reg(0x1fc, fmode); + setup_fmodes(bplcon0); } - - struct color_change *cc = &curr_color_changes[i]; - cc->linepos = diw; - cc->regno = 0; - cc->value = COLOR_CHANGE_ACTBORDER | (onoff ? 1 : 0) | (blank ? 2 : 0); - next_color_change++; } -// hdiw opened again in same scanline -// erase (color0 or bblank) area between previous end and new start -static void hdiw_restart(int diw_last, int diw_current, bool blank) +static void update_mirrors(void) { - if (diw_last >= diw_current || line_hidden() || custom_disabled) { - return; + bool aga_mode_new = (currprefs.chipset_mask & CSMASK_AGA) != 0; + if (aga_mode_new && !aga_mode) { + memcpy(denise_colors.color_regs_aga, saved_color_regs_aga, sizeof(saved_color_regs_aga)); + } else if (!aga_mode_new && aga_mode) { + memcpy(saved_color_regs_aga, denise_colors.color_regs_aga, sizeof(saved_color_regs_aga)); } - // update state - diw_current = adjust_hr(diw_current); - diw_last = adjust_hr(diw_last); - record_color_change2(-diw_current, 0xffff, 0); - - // find slot to insert into - int i; - for (i = last_color_change; i < next_color_change; i++) { - struct color_change *cc = &curr_color_changes[i]; - if (cc->linepos > diw_last) { - break; + aga_mode = aga_mode_new; + ecs_agnus = (currprefs.chipset_mask & CSMASK_ECS_AGNUS) != 0; + ecs_denise = (currprefs.chipset_mask & CSMASK_ECS_DENISE) != 0; + ecs_denise_only = ecs_denise && !aga_mode; + agnusa1000 = (currprefs.chipset_mask & CSMASK_A1000) != 0 || currprefs.cs_agnusmodel == AGNUSMODEL_A1000 || currprefs.cs_agnusmodel == AGNUSMODEL_VELVET; + if (agnusa1000) { + ecs_agnus = false; + aga_mode = false; + } + denisea1000_noehb = (currprefs.chipset_mask & CSMASK_A1000_NOEHB) != 0 || currprefs.cs_denisemodel == DENISEMODEL_VELVET || currprefs.cs_denisemodel == DENISEMODEL_A1000NOEHB; + denisea1000 = (currprefs.chipset_mask & CSMASK_A1000) != 0 || currprefs.cs_denisemodel == DENISEMODEL_VELVET || currprefs.cs_denisemodel == DENISEMODEL_A1000NOEHB || currprefs.cs_denisemodel == DENISEMODEL_A1000; + direct_rgb = aga_mode; + if (aga_mode) { + sprite_sprctlmask = 0x01 | 0x08 | 0x10; + } else if (ecs_denise) { + sprite_sprctlmask = 0x01 | 0x10; + } else { + sprite_sprctlmask = 0x01; + } + if (aga_mode) { + for (int i = 0; i < 256; i++) { + denise_colors.acolors[i] = getxcolor(denise_colors.color_regs_aga[i]); } } - if (i < next_color_change) { - int num = next_color_change - i; - memmove(&curr_color_changes[i + 1], &curr_color_changes[i], sizeof(struct color_change) * num); + ddf_mask = ecs_agnus ? 0xfe : 0xfc; + set_chipset_mode(true); + hsyncdebug = 0; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + hsyncdebug = currprefs.gfx_overscanmode - OVERSCANMODE_ULTRA + 1; } +} - struct color_change *cc = &curr_color_changes[i]; - cc->linepos = diw_last; - cc->regno = 0; - cc->value = COLOR_CHANGE_ACTBORDER | 1 | (blank ? 2 : 0); - next_color_change++; - - record_color_change2(-diw_current, 0, COLOR_CHANGE_ACTBORDER | 0); +void notice_new_xcolors(void) +{ + update_mirrors(); + docols(&denise_colors); } -/* Called to determine the state of the horizontal display window state -* machine at the current position. It might have changed since we last -* checked. */ +static uae_u16 get_strobe_reg(int slot) +{ + uae_u16 strobe = 0x1fe; + if (slot == 0) { + bool equ = ecs_agnus ? agnus_p_ve : agnus_ve; + bool vb = (beamcon0 & BEAMCON0_VARVBEN) ? agnus_pvb && !agnus_pvb_start_line : (agnus_vb == 1 || agnus_vb_end_line); +/* + A1000 Agnus: + Line 0: STRHOR + Line 1: STREQU -static int hdiw_denisecounter, hdiw_denisecounter_abs, hdiw_denisecounter_reset; + OCS Agnus: + Line 0: STRVBL + Line 1: STREQU -// hblank start -static void decide_hdiw_blank_check_start(int hpos, int start_diw_hpos, int end_diw_hpos) -{ - if (hdiwstate_blank == diw_states::DIW_waiting_start) { - if (hbstrt_reg >= start_diw_hpos && hbstrt_reg < end_diw_hpos) { - int val = hdiw_denisecounter_abs + (hbstrt_reg - start_diw_hpos); - insert_actborder(val, true, true); - MARK_LINE_CHANGED; - hdiwstate_blank = diw_states::DIW_waiting_stop; + ECS Agnus: + Line 0: STREQU + Line 1: STREQU +*/ + strobe = 0x03c; + if (vb) { + strobe = 0x03a; } + if (equ) { + strobe = 0x038; + } + } else if (slot == 1 && lol) { + strobe = 0x03e; } + return strobe; } -// hblank end -static void decide_hdiw_blank_check_stop(int hpos, int start_diw_hpos, int end_diw_hpos) + +bool get_ras_cas(uaecptr addr, int *rasp, int *casp) { - if (hdiwstate_blank == diw_states::DIW_waiting_stop) { - if (hbstop_reg >= start_diw_hpos && hbstop_reg < end_diw_hpos) { - int val = hdiw_denisecounter_abs + (hbstop_reg - start_diw_hpos); - insert_actborder(val, false, true); - MARK_LINE_CHANGED; - hdiwstate_blank = diw_states::DIW_waiting_start; + int ras, cas; + bool ret = false; + if (aga_mode) { + ras = (((addr >> 12) & 127) << 1) | ((addr >> 9) & 1); + cas = (addr >> 0) & 0xff; + if ((addr >> 8) & 1) { + ras |= 0x100; + } + if ((addr >> 19) & 1) { + ras |= 0x200; + } + if ((addr >> 10) & 1) { + cas |= 0x100; + } + if ((addr >> 11) & 1) { + cas |= 0x200; + } + } else if (ecs_agnus && currprefs.chipmem.size > 0x100000) { + ras = (addr >> 9) & 0x1ff; + cas = (addr >> 1) & 0xff; + if ((addr >> 19) & 1) { + ras |= 0x200; + } + if ((addr >> 18) & 1) { + cas |= 0x100; + } + } else if (ecs_agnus) { + ras = (addr >> 9) & 0x1ff; + cas = (addr >> 1) & 0xff; + if ((addr >> 19) & 1) { + ret = true; + } + if ((addr >> 18) & 1) { + cas |= 0x100; + } + } else { + ras = (addr >> 1) & 0xff; + cas = (addr >> 9) & 0xff; + if ((addr >> 17) & 1) { + ras |= 0x100; + } + if ((addr >> 18) & 1) { + cas |= 0x100; } } + *rasp = ras; + *casp = cas; + return ret; } -// hdiw open -static void decide_hdiw_check_start(int start_diw_hpos, int end_diw_hpos) + +static bool isham(uae_u16 bplcon0) { - if (hdiwstate == diw_states::DIW_waiting_start) { - if (diw_hstrt >= start_diw_hpos && diw_hstrt < end_diw_hpos) { - int val = hdiw_denisecounter_abs + (diw_hstrt - start_diw_hpos); - int first = coord_diw_shres_to_window_x(val); - if (last_diwlastword >= 0) { - // was closed previously in same line: fill closed part using color0. - if (denisea1000) { - last_diwlastword += 4 << shres_shift; - if (last_diwlastword < val) { - hdiw_restart(last_diwlastword, val, false); - } - } else { - hdiw_restart(last_diwlastword, val, false); - } - last_diwlastword = -1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HDIWS, diw_to_hpos(val), vpos); - } -#endif - } - if (thisline_decision.diwfirstword < 0) { - thisline_decision.diwfirstword = adjust_hr2(first); - // opened before first BPL1DAT? - if (!plane0_first_done) { - plane0p_enabled = ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x20); - } -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HDIWS, diw_to_hpos(first), vpos); - } -#endif - } - hdiwstate = diw_states::DIW_waiting_stop; - } + int p = GET_PLANES(bplcon0); + if (!(bplcon0 & 0x800)) + return 0; + if (aga_mode) { + // AGA only has 6 or 8 plane HAM + if (p == 6 || p == 8) + return 1; + } else { + // OCS/ECS also supports 5 plane HAM + if (GET_RES_DENISE(bplcon0) > 0) + return 0; + if (p >= 5) + return 1; } + return 0; } -// hdiw close -static void decide_hdiw_check_stop(int start_diw_hpos, int end_diw_hpos) + +frame_time_t vsynctimebase_orig; + +void compute_vsynctime(void) { - if (hdiwstate == diw_states::DIW_waiting_stop) { - if (diw_hstop >= start_diw_hpos && diw_hstop < end_diw_hpos) { - int val = hdiw_denisecounter_abs + (diw_hstop - start_diw_hpos); - int last = coord_diw_shres_to_window_x(val); - if (last > thisline_decision.diwlastword) { - thisline_decision.diwlastword = adjust_hr2(last); - // if HDIW opens again in same line - last_diwlastword = val; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_HDIWE, diw_to_hpos(last), vpos); + float svpos = maxvpos_nom + 0.0f; + float shpos = maxhpos_short + 0.0f; + float syncadjust = 1.0; + + fake_vblank_hz = 0; + vblank_hz_mult = 0; + vblank_hz_state = 1; + if (fabs (currprefs.chipset_refreshrate) > 0.1) { + syncadjust = currprefs.chipset_refreshrate / vblank_hz_nom; + vblank_hz = currprefs.chipset_refreshrate; + if (isvsync_chipset() && !currprefs.gfx_variable_sync) { + int mult = 0; + if (getvsyncrate(0, vblank_hz, &mult) != vblank_hz) { + vblank_hz = getvsyncrate(0, vblank_hz, &vblank_hz_mult); + if (vblank_hz_mult > 0) { + vblank_hz_state = 0; } -#endif } - hdiwstate = diw_states::DIW_waiting_start; } } -} + if (!fake_vblank_hz) + fake_vblank_hz = vblank_hz; -static void decide_hdiw_check(int hpos, int start_diw_hpos, int end_diw_hpos) -{ - if ((diw_hstrt >= start_diw_hpos && diw_hstrt < end_diw_hpos) && - (diw_hstop >= start_diw_hpos && diw_hstop < end_diw_hpos)) { - if (diw_hstrt > diw_hstop) { - decide_hdiw_check_stop(start_diw_hpos, end_diw_hpos); - decide_hdiw_check_start(start_diw_hpos, end_diw_hpos); + if (currprefs.turbo_emulation) { + if (currprefs.turbo_emulation_limit > 0) { + vsynctimebase = (frame_time_t)(syncbase / currprefs.turbo_emulation_limit); } else { - decide_hdiw_check_start(start_diw_hpos, end_diw_hpos); - decide_hdiw_check_stop(start_diw_hpos, end_diw_hpos); + vsynctimebase = 1; } } else { - decide_hdiw_check_start(start_diw_hpos, end_diw_hpos); - decide_hdiw_check_stop(start_diw_hpos, end_diw_hpos); - } - // check also hblank if there is chance it has been moved to visible area - if (hstrobe_conflict || vhposw_modified) { - decide_hdiw_blank_check_start(hpos, start_diw_hpos, end_diw_hpos); - } - if (hdiwstate_blank == diw_states::DIW_waiting_stop) { - decide_hdiw_blank_check_stop(hpos, start_diw_hpos, end_diw_hpos); + vsynctimebase = (frame_time_t)(syncbase / fake_vblank_hz); } - hdiw_denisecounter_abs += end_diw_hpos - start_diw_hpos; -} + vsynctimebase_orig = vsynctimebase; -static void decide_hdiw2(int hpos, bool halfcycle) -{ - int hp = (hpos << 1) + halfcycle; // cck->lores - int c = (hp - last_diw_hpos) << (CCK_SHRES_SHIFT - 1); // ->shres - if (c <= 0) { - return; + if (linetoggle) { + shpos += 0.5f; } - if (last_diw_hpos < (HARDWIRED_DMA_TRIGGER_HPOS << 1) && hp >= (HARDWIRED_DMA_TRIGGER_HPOS << 1)) { - hdiw_denisecounter_reset = (REFRESH_FIRST_HPOS - HARDWIRED_DMA_TRIGGER_HPOS + 3) << CCK_SHRES_SHIFT; - //hdiw_denisecounter_reset += 1 << (CCK_SHRES_SHIFT - 1); + if (interlace_seen) { + svpos += 0.5f; + } else if (lof_display) { + svpos += 1.0f; } - - int start = hdiw_denisecounter; - int max = 512 << (CCK_SHRES_SHIFT - 1); - - if (hdiw_denisecounter_reset > 0 && c >= hdiw_denisecounter_reset && !line_equ_freerun && !hstrobe_conflict) { - // strobe crossed? - hdiw_denisecounter += hdiw_denisecounter_reset; - decide_hdiw_check(hpos, start, hdiw_denisecounter); - hdiw_denisecounter = 2 << LORES_TO_SHRES_SHIFT; - start = hdiw_denisecounter; - hdiw_denisecounter += c - hdiw_denisecounter_reset; - decide_hdiw_check(hpos, start, hdiw_denisecounter); - hdiw_denisecounter_reset = -1; - } else { - hdiw_denisecounter += c; - // wrap around? - if (hdiw_denisecounter >= max) { - decide_hdiw_check(hpos, start, max); - hdiw_denisecounter &= max - 1; - if (hdiw_denisecounter > 0) { - decide_hdiw_check(hpos, 0, hdiw_denisecounter); - } - } else { - decide_hdiw_check(hpos, start, hdiw_denisecounter); - } - if (hdiw_denisecounter_reset >= 0) { - hdiw_denisecounter_reset -= c; - } + if (currprefs.produce_sound > 1) { + float clk = svpos * shpos * fake_vblank_hz; + write_log(_T("SNDRATE %.1f*%.1f*%.6f=%.6f\n"), svpos, shpos, fake_vblank_hz, clk); + devices_update_sound(clk, syncadjust); } - - last_diw_hpos = hp; + devices_update_sync(svpos, syncadjust); } -static void decide_hdiw(int hpos, bool halfcycle = false) +void getsyncregisters(uae_u16 *phsstrt, uae_u16 *phsstop, uae_u16 *pvsstrt, uae_u16 *pvsstop) { -#ifdef DEBUGGER - if (!debug_dma) { - decide_hdiw2(hpos, halfcycle); - } else { - for (int i = (last_diw_hpos >> 1); i <= hpos; i++) { - decide_hdiw2(i, halfcycle); - halfcycle = false; - record_dma_denise(i, hdiw_denisecounter >> 2); - } - } -#else - decide_hdiw2(hpos, halfcycle); -#endif + *phsstrt = hsstrt; + *phsstop = hsstop_detect2 / 2; + *pvsstrt = vsstrt; + *pvsstop = vsstop; } -static void sync_changes(int hpos) +static void dumpsync(void) { - decide_hdiw(hpos); - decide_sprites(hpos); - record_color_change2(hpos, 0xffff, 0); - + static int cnt = 100; + if (cnt < 0) { + return; + } + cnt--; + write_log(_T("BEAMCON0=%04X VTOTAL=%04X (%03d) HTOTAL=%04X (%03d)\n"), new_beamcon0, vtotal, vtotal, htotal, htotal); + write_log(_T(" HS=%04X-%04X (%d-%d) HB=%04X-%04X (%d-%d) HC=%04X (%d)\n"), + hsstrt, hsstop, hsstrt, hsstop, hbstrt, hbstop, hbstrt, hbstop, hcenter, hcenter); + write_log(_T(" VS=%04X-%04X (%d-%d) VB=%04X-%04X (%d-%d)\n"), + vsstrt, vsstop, vsstrt, vsstop, vbstrt, vbstop, vbstrt, vbstop); + write_log(_T(" HSYNCSTART=%04X.%X (%d.%d) HSYNCEND=%04X.%X (%d.%d)\n"), + hsyncstartpos >> CCK_SHRES_SHIFT, hsyncstartpos & ((1 << CCK_SHRES_SHIFT) - 1), + hsyncstartpos >> CCK_SHRES_SHIFT, hsyncstartpos & ((1 << CCK_SHRES_SHIFT) - 1), + hsyncendpos >> CCK_SHRES_SHIFT, hsyncendpos & ((1 << CCK_SHRES_SHIFT) - 1), + hsyncendpos >> CCK_SHRES_SHIFT, hsyncendpos &((1 << CCK_SHRES_SHIFT) - 1)); + write_log(_T(" Lines=%04X-%04X (%d-%d)\n"), + minfirstline, maxvpos_display + vsync_startline, + minfirstline, maxvpos_display + vsync_startline); + write_log(_T("PC=%08x COP=%08x\n"), M68K_GETPC, cop_state.ip); } -static int fetchmode, fetchmode_size, fetchmode_mask, fetchmode_bytes; -static int fetchmode_fmode_bpl, fetchmode_fmode_spr; -static int real_bitplane_number[3][3][9]; - -/* Disable bitplane DMA if planes > available DMA slots. This is needed -e.g. by the Sanity WOC demo (at the "Party Effect"). */ -STATIC_INLINE int GET_PLANES_LIMIT(uae_u16 bc0) +int current_maxvpos(void) { - int res = GET_RES_AGNUS(bc0); - int planes = GET_PLANES(bc0); - return real_bitplane_number[fetchmode][res][planes]; + return maxvpos + (lof_store ? 1 : 0); } -static void add_mod(int nr, uae_s16 mod) +static void updateextblk(void) { -#ifdef AGA - if (fetchmode_fmode_bpl == 1 || fetchmode_fmode_bpl == 2) { - // FMODE=1/2, unaligned bpl and modulo: bit 1 carry is ignored. - if ((bplpt[nr] & 2) && (mod & 2)) { - mod -= 4; - } - } else if (fetchmode_fmode_bpl == 3) { - // FMODE=3, unaligned bpl and modulo: bit 2 carry is ignored. - if ((bplpt[nr] & (4 | 2)) + (mod & (4 | 2)) >= 8) { - mod -= 8; - } - } -#endif + hsyncstartpos_start_hw = 13; + hsyncstartpos_hw = maxhpos_short + hsyncstartpos_start_hw; + hsyncendpos_hw = 24; - bplpt[nr] += mod; - bplptx[nr] += mod; -} + if ((new_beamcon0 & bemcon0_hsync_mask) && (!currprefs.monitoremu || currprefs.cs_hvcsync > 0)) { -static void add_modulo(int hpos, int nr) -{ - uae_s16 mod, m1, m2; + hsyncstartpos = hsstrt + 2; - m1 = bpl1mod; - m2 = bpl2mod; - if (bpl1mod_hpos == hpos) { - m1 = bpl1mod_prev; - } - if (bpl2mod_hpos == hpos) { - m2 = bpl2mod_prev; - } - if (fmode & 0x4000) { - if (((diwstrt >> 8) ^ (vposh ^ 1)) & 1) { - mod = m2; - } else { - mod = m1; + if (hsyncstartpos >= maxhpos_short) { + hsyncstartpos -= maxhpos_short; } - } else if (nr & 1) { - mod = m2; - } else { - mod = m1; - } - add_mod(nr, mod); -} + hsyncendpos = hsstop; -static void add_modulos(void) -{ - uae_s16 m1, m2; + hsstop_detect2 = (hsstrt + 21) * 2; + if (hsstop_detect2 >= maxhpos_short * 2) { + hsstop_detect2 -= maxhpos_short * 2; + } - if (fmode & 0x4000) { - if (((diwstrt >> 8) ^ (vposh ^ 1)) & 1) { - m1 = m2 = bpl2mod; + hsyncstartpos_start = hsyncstartpos; + if (hsyncstartpos < maxhpos_short / 2) { + hsyncstartpos = maxhpos_short + hsyncstartpos_start; + denisehtotal = hsyncstartpos; } else { - m1 = m2 = bpl1mod; + denisehtotal = maxhpos_short + hsyncstartpos; + } + // make sure possible BPL DMA cycles before first refresh slot are processed before hsync + if (hsyncstartpos_start < REFRESH_FIRST_HPOS + 1) { + hsyncstartpos_start = REFRESH_FIRST_HPOS + 1; } + } else { - m1 = bpl1mod; - m2 = bpl2mod; - } - switch (bplcon0_planes_limit) { -#ifdef AGA - case 8: add_mod(7, m2); - case 7: add_mod(6, m1); -#endif - case 6: add_mod(5, m2); - case 5: add_mod(4, m1); - case 4: add_mod(3, m2); - case 3: add_mod(2, m1); - case 2: add_mod(1, m2); - case 1: add_mod(0, m1); - } -} + hsyncstartpos_start = hsyncstartpos_start_hw; + hsyncstartpos = hsyncstartpos_hw; + denisehtotal = maxhpos_short + 7; + hsstop_detect2 = (35 + 9) * 2; -/* The fetch unit mainly controls ddf stop. It's the number of cycles that -are contained in an indivisible block during which ddf is active. E.g. -if DDF starts at 0x30, and fetchunit is 8, then possible DDF stops are -0x30 + n * 8. */ -static uae_u32 fetchunit, fetchunit_mask; -/* The delay before fetching the same bitplane again. Can be larger than -the number of bitplanes; in that case there are additional empty cycles -with no data fetch (this happens for high fetchmodes and low -resolutions). */ -static uae_u32 fetchstart, fetchstart_shift, fetchstart_mask; -/* fm_maxplane holds the maximum number of planes possible with the current -fetch mode. This selects the cycle diagram: -8 planes: 73516240 -4 planes: 3120 -2 planes: 10. */ -static uae_u32 fm_maxplane, fm_maxplane_shift; + hsyncendpos = hsyncendpos_hw; -/* The corresponding values, by fetchmode and display resolution. */ -static const uae_u8 fetchunits[] = { 8,8,8,0, 16,8,8,0, 32,16,8,0 }; -static const uae_u8 fetchstarts[] = { 3,2,1,0, 4,3,2,0, 5,4,3,0 }; -static const uae_u8 fm_maxplanes[] = { 3,2,1,0, 3,3,2,0, 3,3,3,0 }; + } -static uae_s8 cycle_diagram_table[3][3][9][32]; -static uae_s8 cycle_diagram_free_cycles[3][3][9]; -static uae_s8 cycle_diagram_total_cycles[3][3][9]; -static uae_s8 *curr_diagram; -static const uae_s8 cycle_sequences[3 * 8] = { 2,1,2,1,2,1,2,1, 4,2,3,1,4,2,3,1, 8,4,6,2,7,3,5,1 }; + hsyncstartpos_start_hw <<= CCK_SHRES_SHIFT; + hsyncstartpos_hw <<= CCK_SHRES_SHIFT; + hsyncendpos_hw <<= CCK_SHRES_SHIFT; -static void debug_cycle_diagram(void) -{ - int fm, res, planes, cycle, v; - TCHAR aa; + hsyncstartpos_start_cycles = hsyncstartpos_start; - for (fm = 0; fm <= 2; fm++) { - write_log(_T("FMODE %d\n=======\n"), fm); - for (res = 0; res <= 2; res++) { - for (planes = 0; planes <= 8; planes++) { - write_log(_T("%d: "), planes); - for (cycle = 0; cycle < 32; cycle++) { - v = cycle_diagram_table[fm][res][planes][cycle]; - if (v == 0) aa = '-'; else if (v > 0) aa = '1'; else aa = 'X'; - write_log(_T("%c"), aa); - } - write_log(_T(" %d:%d\n"), cycle_diagram_free_cycles[fm][res][planes], cycle_diagram_total_cycles[fm][res][planes]); - } - write_log(_T("\n")); - } - } - fm = 0; -} + hsyncstartpos_start <<= CCK_SHRES_SHIFT; + hsyncstartpos <<= CCK_SHRES_SHIFT; + hsyncendpos <<= CCK_SHRES_SHIFT; -static void create_cycle_diagram_table(void) -{ - int fm, res, cycle, planes, rplanes, v; - int fetch_start, max_planes, freecycles; - const uae_s8 *cycle_sequence; + denisehtotal <<= CCK_SHRES_SHIFT; - for (fm = 0; fm <= 2; fm++) { - for (res = 0; res <= 2; res++) { - max_planes = fm_maxplanes[fm * 4 + res]; - fetch_start = 1 << fetchstarts[fm * 4 + res]; - cycle_sequence = &cycle_sequences[(max_planes - 1) * 8]; - max_planes = 1 << max_planes; - for (planes = 0; planes <= 8; planes++) { - freecycles = 0; - for (cycle = 0; cycle < 32; cycle++) { - cycle_diagram_table[fm][res][planes][cycle] = -1; - } - if (planes <= max_planes) { - for (cycle = 0; cycle < fetch_start; cycle++) { - if (cycle < max_planes && planes >= cycle_sequence[cycle & 7]) { - v = cycle_sequence[cycle & 7]; - } else { - v = -1; - freecycles++; - } - cycle_diagram_table[fm][res][planes][cycle] = v; - } - } - cycle_diagram_free_cycles[fm][res][planes] = freecycles; - cycle_diagram_total_cycles[fm][res][planes] = fetch_start; - rplanes = planes; - if (rplanes > max_planes) { - rplanes = 0; - } - if (rplanes == 7 && fm == 0 && res == 0 && !aga_mode) { - rplanes = 4; - } - real_bitplane_number[fm][res][planes] = rplanes; - } - } + // ECS Denise has 1 extra lores pixel in right border + if (ecs_denise) { + denisehtotal += 1 << (CCK_SHRES_SHIFT - 1); } -#if 0 - debug_cycle_diagram(); -#endif -} -static void clear_bitplane_pipeline(int type) -{ - // clear bitplane allocations - int safepos = hsyncstartpos_start_cycles - 1; - int count = RGA_PIPELINE_ADJUST + 1; - if (type) { - for (int i = 0; i < maxhposm0 + RGA_PIPELINE_ADJUST; i++) { - if (i < safepos || i >= safepos + count) { - uae_u16 v = cycle_line_pipe[i]; - if (v & CYCLE_PIPE_BITPLANE) { - cycle_line_pipe[i] = 0; - } - } - } - } else { - for (int i = safepos; i < safepos + count; i++) { - uae_u16 v = cycle_line_pipe[i]; - if (v & CYCLE_PIPE_BITPLANE) { - cycle_line_pipe[i] = 0; - } - } - } } -#define HARD_DDF_STOP 0xd8 - -#define ESTIMATED_FETCH_MODE 1 -#define OPTIMIZED_ESTIMATE 1 - -static uae_s8 estimated_cycles_buf0[MAX_CHIPSETSLOTS + MAX_CHIPSETSLOTS_EXTRA]; -static uae_s8 estimated_cycles_buf1[MAX_CHIPSETSLOTS + MAX_CHIPSETSLOTS_EXTRA]; -static uae_s8 estimated_cycles_empty[MAX_CHIPSETSLOTS + MAX_CHIPSETSLOTS_EXTRA]; -static int estimate_cycles_empty_index = -1; -static uae_u16 estimated_bplcon0, estimated_fm, estimated_plfstrt, estimated_plfstop; -static uae_s8 *estimated_cycles = estimated_cycles_empty; -static uae_s8 *estimated_cycles_next = estimated_cycles_empty; -static bool estimated_empty; -static int estimated_maxhpos[2]; - -#if ESTIMATED_FETCH_MODE - -static void end_estimate_last_fetch_cycle(int hpos) +struct chipset_refresh *get_chipset_refresh(struct uae_prefs *p) { -#if OPTIMIZED_ESTIMATE - if (estimate_cycles_empty_index >= 0) { - for (int i = 0; i < RGA_PIPELINE_ADJUST; i++) { - int pos = (estimate_cycles_empty_index + i) % maxhpos; - estimated_cycles_empty[pos] = 0; - } - estimate_cycles_empty_index = -1; + struct amigadisplay *ad = &adisplays[0]; + int islace = interlace_seen ? 1 : 0; + int isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; + int custom = programmedmode == 1 ? 1 : 0; + + if (!ecs_agnus) { + isntsc = currprefs.ntscmode ? 1 : 0; } - if (estimated_cycles_empty != estimated_cycles) { - estimated_cycles = estimated_cycles_empty; - estimated_cycles_next = estimated_cycles_empty; - estimate_cycles_empty_index = hpos; - if (linetoggle) { - uae_s8 *est = maxhposeven ? estimated_cycles_buf1 : estimated_cycles_buf0; - uae_s8 *est_n = maxhposeven ? estimated_cycles_buf0 : estimated_cycles_buf1; - if (maxhpos == estimated_maxhpos[0]) { - est = estimated_cycles_buf0; - est_n = estimated_cycles_buf1; - } else if (maxhpos == estimated_maxhpos[1]) { - est = estimated_cycles_buf1; - est_n = estimated_cycles_buf0; - } - for (int i = 0; i < RGA_PIPELINE_ADJUST; i++) { - int pos = hpos + i; - if (pos >= maxhpos) { - pos -= maxhpos; - estimated_cycles_empty[pos] = est_n[pos]; - } else { - estimated_cycles_empty[pos] = est[pos]; - } - } - } else { - uae_s8 *est = maxhposeven ? estimated_cycles_buf1 : estimated_cycles_buf0; - if (maxhpos == estimated_maxhpos[0]) { - est = estimated_cycles_buf0; - } else if (maxhpos == estimated_maxhpos[1]) { - est = estimated_cycles_buf1; - } - for (int i = 0; i < RGA_PIPELINE_ADJUST; i++) { - int pos = hpos + i; - if (pos >= maxhpos) { - pos -= maxhpos; - } - estimated_cycles_empty[pos] = est[pos]; - } + + int def = -1; + for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { + struct chipset_refresh *cr = &p->cr[i]; + if (cr->defaultdata) + def = i; + if (cr->inuse) { + if ((cr->horiz < 0 || cr->horiz == maxhpos) && + (cr->vert < 0 || cr->vert == maxvpos_display) && + (cr->ntsc < 0 || (cr->ntsc == 1 && isntsc && !custom) || (cr->ntsc == 0 && !isntsc && !custom) || (cr->ntsc == 2 && custom)) && + (cr->lace < 0 || (cr->lace > 0 && islace) || (cr->lace == 0 && !islace)) && + (cr->resolution == 0 || cr->resolution == 7 || (cr->resolution & (1 << detected_screen_resolution))) && + (cr->framelength < 0 || (cr->framelength > 0 && lof_store) || (cr->framelength == 0 && !lof_store) || (cr->framelength >= 0 && islace)) && + ((cr->rtg && ad->picasso_on) || (!cr->rtg && !ad->picasso_on)) && + (cr->vsync < 0 || (cr->vsync > 0 && isvsync_chipset ()) || (cr->vsync == 0 && !isvsync_chipset ()))) + return cr; } } -#else - estimated_cycles = estimated_cycles_buf0; - int start_pos = (hpos + RGA_PIPELINE_ADJUST) % maxhpos; - if (start_pos >= hpos) { - memset(estimated_cycles + start_pos, 0, maxhpos - start_pos); - memset(estimated_cycles, 0, hpos); - } else { - memset(estimated_cycles + start_pos, 0, hpos - start_pos); + if (def >= 0) { + return &p->cr[def]; } -#endif - estimated_empty = true; + return NULL; } -static void estimate_last_fetch_cycle(int hpos) +static bool changed_chipset_refresh(void) { - if (!bprun) { + return stored_chipset_refresh != get_chipset_refresh(&currprefs); +} - end_estimate_last_fetch_cycle(hpos); +void compute_framesync(void) +{ + struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; + struct amigadisplay *ad = &adisplays[0]; + int islace = interlace_seen ? 1 : 0; + int isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; + bool found = false; + if (islace) { + vblank_hz = vblank_hz_lace; + } else if (lof_store) { + vblank_hz = vblank_hz_lof; } else { + vblank_hz = vblank_hz_shf; + } -#if OPTIMIZED_ESTIMATE - if (estimated_bplcon0 == bplcon0 && bpl_hstart == hpos && estimated_plfstrt == bpl_hstart && estimated_plfstop == plfstop && estimated_fm == fetchmode) { - if (linetoggle) { - if (maxhpos == estimated_maxhpos[0]) { - estimated_cycles = estimated_cycles_buf0; - estimated_cycles_next = estimated_cycles_buf1; - return; - } - if (maxhpos == estimated_maxhpos[1]) { - estimated_cycles = estimated_cycles_buf1; - estimated_cycles_next = estimated_cycles_buf0; - return; - } - } else { - if (maxhpos == estimated_maxhpos[0]) { - estimated_cycles = estimated_cycles_buf0; - estimated_cycles_next = estimated_cycles; - return; - } - if (maxhpos == estimated_maxhpos[1]) { - estimated_cycles = estimated_cycles_buf1; - estimated_cycles_next = estimated_cycles; - return; - } - } - } else { - estimated_maxhpos[0] = estimated_maxhpos[1] = -1; - } -#endif -#if 0 - // plfstrt=24 plfstop=32 bpl_hstart=56 hard_ddf_stop=216 ddf_stopping=0 fetch_cycle=136 fetchunit=8 lastfetchunit=8 - bpl_hstart = 56; - plfstrt = 24; - plfstop = 32; - bplcon0_res = 0; - fetchmode = 0; - fetch_cycle = 136; - ddf_stopping = 0; - hpos = 0; - curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][8]; -#endif - int hard_ddf_stop = harddis_h ? 0x100 : HARD_DDF_STOP; - int start = bpl_hstart; - int adjusted_plfstop = plfstop; - int estimated_cycle_count; - int fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; - // Last fetch is always max 8 even if fetchunit is larger. - int lastfetchunit = fetchunit >= 8 ? 8 : fetchunit; - - if (!ddf_stopping) { - int stop; - if (ecs_agnus) { - // ECS: stop wins if start == stop - stop = adjusted_plfstop < hpos || adjusted_plfstop > hard_ddf_stop ? hard_ddf_stop : adjusted_plfstop; - } else { - // OCS: start wins if start == stop - stop = adjusted_plfstop <= hpos || adjusted_plfstop > hard_ddf_stop ? hard_ddf_stop : adjusted_plfstop; - } - /* We know that fetching is up-to-date up until hpos, so we can use fetch_cycle. */ - if (start > stop) { - // weird case handling - if (stop < fetch_cycle) { - stop = hard_ddf_stop; - } - int starting_last_block_at = (stop + fetchunit - 1) & ~(fetchunit - 1); - estimated_cycle_count = (starting_last_block_at - fetch_cycle) + lastfetchunit; - if (estimated_cycle_count < 0) { - estimated_cycle_count += maxhpos; - } - } else { - int fetch_cycle_at_stop = fetch_cycle + (stop - start); - int starting_last_block_at = (fetch_cycle_at_stop + fetchunit - 1) & ~(fetchunit - 1); - estimated_cycle_count = (starting_last_block_at - fetch_cycle) + lastfetchunit; - } - } else { - int fc = fetch_cycle; - int starting_last_block_at = (fc + fetchunit - 1) & ~(fetchunit - 1); - if (ddf_stopping == 2) { - if (starting_last_block_at <= fetchunit) { - starting_last_block_at = 0; - } else { - starting_last_block_at -= fetchunit; - } - } - estimated_cycle_count = (starting_last_block_at - fc) + lastfetchunit; - } - -#if OPTIMIZED_ESTIMATE - estimated_cycles = maxhposeven ? estimated_cycles_buf1 : estimated_cycles_buf0; - if (linetoggle) { - estimated_cycles_next = maxhposeven ? estimated_cycles_buf0 : estimated_cycles_buf1; - } else { - estimated_cycles_next = estimated_cycles; - } -#else - estimated_cycles = estimated_cycles_buf0; - estimated_cycles_next = estimated_cycles; -#endif - uae_s8 *ecycs = estimated_cycles; - // bitplane DMA end can wrap around, even in non-overrun cases - int start_pos = (hpos + RGA_PIPELINE_ADJUST) % maxhpos; - int start_pos2 = start_pos; - int end_pos = (hpos + RGA_PIPELINE_ADJUST + estimated_cycle_count) % maxhpos; - int off = (start_pos - (bpl_hstart + RGA_PIPELINE_ADJUST)) & (fetchunit - 1); - while (start_pos != end_pos && end_pos >= 0) { - int off2 = off & fetchstart_mask; + vblank_hz = target_adjust_vblank_hz(0, vblank_hz); -#if 0 - if (start_pos < 0 || start_pos > maxhpos || fetchstart > 32 || end_pos < 0 || end_pos > maxhpos) { - gui_message(_T("ERROR: %d %d %d %d %d %d %d %d %d %d\n%d %d %d %d %d %d %d %d %04x %d\n"), - hpos, bpl_hstart, estimated_cycle_count, start_pos, start_pos2, end_pos, off, off2, fetchstart, maxhpos, - plfstrt, plfstop, hard_ddf_stop, ddf_stopping, fetch_cycle, fetchunit, lastfetchunit, vpos, bplcon0, fmode); - } -#endif + struct chipset_refresh *cr = get_chipset_refresh(&currprefs); + while (cr) { + float v = -1; + if (!ad->picasso_on && !ad->picasso_requested_on) { + if (isvsync_chipset ()) { + if (!currprefs.gfx_variable_sync) { + if (cr->index == CHIPSET_REFRESH_PAL || cr->index == CHIPSET_REFRESH_NTSC) { + if ((fabs(vblank_hz - 50.0f) < 1 || fabs(vblank_hz - 60.0f) < 1 || fabs(vblank_hz - 100.0) < 1 || fabs(vblank_hz - 120.0f) < 1) && currprefs.gfx_apmode[0].gfx_vsync == 2 && currprefs.gfx_apmode[0].gfx_fullscreen > 0) { + vsync_switchmode(0, (int)vblank_hz); + } + } + if (isvsync_chipset() < 0) { - if (!off2 && start_pos + fetchstart <= end_pos) { - memcpy(ecycs + start_pos, curr_diagram, fetchstart); - start_pos += fetchstart; - } else { - ecycs[start_pos] = curr_diagram[off2]; - start_pos++; - if (start_pos >= maxhpos) { - start_pos = 0; - if (linetoggle) { - ecycs = estimated_cycles_next; + float v2; + v2 = target_getcurrentvblankrate(0); + if (!cr->locked) + v = v2; + } else if (isvsync_chipset() > 0) { + if (currprefs.gfx_apmode[0].gfx_refreshrate) { + v = (float)abs(currprefs.gfx_apmode[0].gfx_refreshrate); + } } } - if (start_pos == REFRESH_FIRST_HPOS) { - // bpl sequencer repeated this cycle - // (request was done at cycle 0) - off--; + } else { + if (cr->locked == false) { + changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; + cfgfile_parse_lines (&changed_prefs, cr->commands, -1); + if (cr->commands[0]) { + write_log(_T("CMD1: '%s'\n"), cr->commands); + } + break; + } else { + v = cr->rate; } - off++; } - } -#if OPTIMIZED_ESTIMATE - if (estimated_empty && bpl_hstart == hpos && !ddf_stopping) { - estimated_empty = false; - // zero rest of buffer - if (end_pos != start_pos2) { - if (end_pos > start_pos2) { - memset(ecycs + end_pos, 0, maxhpos - end_pos); - memset(ecycs, 0, start_pos2); - } else { - memset(ecycs + end_pos, 0, start_pos2 - end_pos); + if (v < 0) + v = cr->rate; + if (v > 0) { + changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; + cfgfile_parse_lines (&changed_prefs, cr->commands, -1); + if (cr->commands[0]) { + write_log(_T("CMD2: '%s'\n"), cr->commands); } } - estimated_bplcon0 = bplcon0; - estimated_plfstrt = bpl_hstart; - estimated_plfstop = plfstop; - estimated_fm = fetchmode; - estimated_maxhpos[maxhposeven] = maxhpos; } else { - estimated_fm = 0xffff; - estimated_maxhpos[0] = -1; - estimated_maxhpos[1] = -1; + if (cr->locked == false) + v = vblank_hz; + else + v = cr->rate; + changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; + cfgfile_parse_lines (&changed_prefs, cr->commands, -1); + if (cr->commands[0]) { + write_log(_T("CMD3: '%s'\n"), cr->commands); + } } -#endif + found = true; + break; } -} + if (!found) { + changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; + } + stored_chipset_refresh = cr; + lof_changing = 0; + vidinfo->drawbuffer.inxoffset = -1; + vidinfo->drawbuffer.inyoffset = -1; + updateextblk(); -#else + hsync_end_left_border = display_hstart_cyclewait_end + display_hstart_cyclewait; -struct bpl_estimate { - uae_u16 startend; - uae_u16 start_pos; - uae_u16 end_pos; - uae_u16 vpos; - uae_s8 *cycle_diagram; - uae_u16 ce_offset; -}; + int res = GET_RES_AGNUS(bplcon0); + int eres = 0; -#define MAX_BPL_ESTIMATES 2 -static struct bpl_estimate bpl_estimates[MAX_BPL_ESTIMATES]; -static int bpl_estimate_index; + int res2 = currprefs.gfx_resolution; -static void end_estimate_last_fetch_cycle(int hpos) -{ - for (int i = 0; i < MAX_BPL_ESTIMATES; i++) { - struct bpl_estimate *be = &bpl_estimates[i]; - if (be->startend && be->vpos == vposh) { - if (be->end_pos > hpos + RGA_PIPELINE_ADJUST) { - be->end_pos = hpos + RGA_PIPELINE_ADJUST; - } else if (be->start_pos > be->end_pos && ((hpos + RGA_PIPELINE_ADJUST) % maxhpos) > be->start_pos) { - be->end_pos = (hpos + RGA_PIPELINE_ADJUST) % maxhpos; - be->startend = 1; - } - } + if (doublescan > 0) { + res2++; + eres++; + } + if (res2 > RES_MAX) { + res2 = RES_MAX; + eres--; } -} - -static void estimate_last_fetch_cycle(int hpos) -{ - int hard_ddf_stop = harddis_h ? 0x100 : HARD_DDF_STOP; - int start = bpl_hstart; - int adjusted_plfstop = plfstop; - int estimated_cycle_count; - int fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; - // Last fetch is always max 8 even if fetchunit is larger. - int lastfetchunit = fetchunit >= 8 ? 8 : fetchunit; - end_estimate_last_fetch_cycle(hpos); + hsync_end_left_border <<= eres; - if (!bprun) { - return; + int vres2 = currprefs.gfx_vresolution; + if (doublescan > 0 && !islace) { + vres2--; } - bpl_estimate_index++; - bpl_estimate_index &= MAX_BPL_ESTIMATES - 1; - struct bpl_estimate *be = &bpl_estimates[bpl_estimate_index]; - - if (!ddf_stopping) { - int stop; - if (ecs_agnus) { - // ECS: stop wins if start == stop - stop = adjusted_plfstop < hpos || adjusted_plfstop > hard_ddf_stop ? hard_ddf_stop : adjusted_plfstop; - } else { - // OCS: start wins if start == stop - stop = adjusted_plfstop <= hpos || adjusted_plfstop > hard_ddf_stop ? hard_ddf_stop : adjusted_plfstop; - } - /* We know that fetching is up-to-date up until hpos, so we can use fetch_cycle. */ - int fetch_cycle_at_stop = fetch_cycle + (stop - start); - int starting_last_block_at = (fetch_cycle_at_stop + fetchunit - 1) & ~(fetchunit - 1); - estimated_cycle_count = (starting_last_block_at - fetch_cycle) + lastfetchunit; - } else { - int fc = fetch_cycle; - int starting_last_block_at = (fc + fetchunit - 1) & ~(fetchunit - 1); - if (ddf_stopping == 2) { - starting_last_block_at -= fetchunit; - } - estimated_cycle_count = (starting_last_block_at - fc) + lastfetchunit; + if (vres2 < 0) { + vres2 = 0; + } + if (vres2 > VRES_QUAD) { + vres2 = VRES_QUAD; } - // bitplane DMA end can wrap around, even in non-overrun cases - be->start_pos = (hpos + RGA_PIPELINE_ADJUST) % maxhpos; - be->end_pos = (hpos + RGA_PIPELINE_ADJUST + estimated_cycle_count) % maxhpos; - if (be->end_pos > be->start_pos) { - be->startend = 1; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + vidinfo->drawbuffer.inwidth = current_linear_hpos << (res2 + 1); + } else if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME) { + vidinfo->drawbuffer.inwidth = (current_linear_hpos - (display_hstart_cyclewait_end + display_hstart_cyclewait) + 3) << (res2 + 1); } else { - be->startend = 2; + vidinfo->drawbuffer.inwidth = (current_linear_hpos - (display_hstart_cyclewait_end + display_hstart_cyclewait) + 1) << (res2 + 1); } - be->vpos = vposh; - be->cycle_diagram = curr_diagram; - be->ce_offset = ((bpl_hstart + RGA_PIPELINE_ADJUST) - be->start_pos) & (fetchunit - 1); -} -#endif - -static void calcdiw(void); -static void set_chipset_mode(void) -{ - fmode = fmode_saved; - bplcon0 = bplcon0_saved; - bplcon1 = bplcon1_saved; - bplcon2 = bplcon2_saved; - bplcon3 = bplcon3_saved; - bplcon4 = bplcon4_saved; - if (!aga_mode) { - fmode = 0; - bplcon0 &= ~(0x0010 | 0x0020); - bplcon1 &= ~(0xff00); - bplcon2 &= ~(0x0100 | 0x0080); - bplcon3 &= 0x003f; - bplcon3 |= 0x0c00; - bplcon4 = 0x0011; - if (!ecs_agnus) { - bplcon0 &= ~0x0080; - diwhigh_written = 0; - } - if (!ecs_denise) { - bplcon0 &= ~0x0001; - bplcon2 &= 0x007f; - bplcon3 = 0x0c00; - } + vidinfo->drawbuffer.inwidth2 = vidinfo->drawbuffer.inwidth; + vidinfo->drawbuffer.extrawidth = -2; + if (currprefs.gfx_extrawidth > 0) { + vidinfo->drawbuffer.extrawidth = currprefs.gfx_extrawidth << res2; } - sprres = expand_sprres(bplcon0, bplcon3); - sprite_width = GET_SPRITEWIDTH(fmode); - for (int i = 0; i < MAX_SPRITES; i++) { - spr[i].width = sprite_width; + vidinfo->drawbuffer.extraheight = -2; + if (currprefs.gfx_extraheight > 0) { + vidinfo->drawbuffer.extraheight = currprefs.gfx_extraheight << vres2; } - shdelay_disabled = false; - exthblank_state = false; - refmask = 0x1fffff; - ref_ras_add = REF_RAS_ADD_AGA; - if (!aga_mode) { - ref_ras_add = REF_RAS_ADD_ECS; - refmask >>= 1; - if (!ecs_agnus) { - ref_ras_add = REF_RAS_ADD_OCS; - refmask >>= 1; - } + if (vidinfo->drawbuffer.extrawidth == -2 && ((new_beamcon0 & (BEAMCON0_VARVBEN | bemcon0_vsync_mask)) || currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME)) { + vidinfo->drawbuffer.extrawidth = -1; } - calcdiw(); -} + int maxv = current_linear_vpos - (minfirstline > vsync_startline ? minfirstline - vsync_startline : 0); + vidinfo->drawbuffer.inheight = (maxv + 1) << vres2; + vidinfo->drawbuffer.inheight2 = vidinfo->drawbuffer.inheight; + vidinfo->drawbuffer.inxoffset = 0; -static void update_mirrors(void) -{ - aga_mode = (currprefs.chipset_mask & CSMASK_AGA) != 0; - ecs_agnus = (currprefs.chipset_mask & CSMASK_ECS_AGNUS) != 0; - ecs_denise = (currprefs.chipset_mask & CSMASK_ECS_DENISE) != 0; - agnusa1000 = currprefs.cs_agnusmodel == AGNUSMODEL_A1000 || currprefs.cs_agnusmodel == AGNUSMODEL_VELVET; - if (agnusa1000) { - ecs_agnus = false; - aga_mode = false; - } - denisea1000_noehb = currprefs.cs_denisemodel == DENISEMODEL_VELVET || currprefs.cs_denisemodel == DENISEMODEL_A1000NOEHB; - denisea1000 = currprefs.cs_denisemodel == DENISEMODEL_VELVET || currprefs.cs_denisemodel == DENISEMODEL_A1000NOEHB || currprefs.cs_denisemodel == DENISEMODEL_A1000; - direct_rgb = aga_mode; - if (aga_mode) { - sprite_sprctlmask = 0x01 | 0x08 | 0x10; - } else if (ecs_denise) { - sprite_sprctlmask = 0x01 | 0x10; - } else { - sprite_sprctlmask = 0x01; - } - if (aga_mode) { - for (int i = 0; i < 256; i++) { - current_colors.acolors[i] = getxcolor(current_colors.color_regs_aga[i]); - } - } - set_chipset_mode(); - hsyncdebug = 0; - if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - hsyncdebug = currprefs.gfx_overscanmode - OVERSCANMODE_ULTRA + 1; - } -} + //write_log(_T("Width %d Height %d\n"), vidinfo->drawbuffer.inwidth, vidinfo->drawbuffer.inheight); -extern struct color_entry colors_for_drawing; + if (vidinfo->drawbuffer.inwidth < 16) + vidinfo->drawbuffer.inwidth = 16; + if (vidinfo->drawbuffer.inwidth2 < 16) + vidinfo->drawbuffer.inwidth2 = 16; + if (vidinfo->drawbuffer.inheight < 1) + vidinfo->drawbuffer.inheight = 1; + if (vidinfo->drawbuffer.inheight2 < 1) + vidinfo->drawbuffer.inheight2 = 1; -void notice_new_xcolors(void) -{ - update_mirrors(); - docols(¤t_colors); - docols(&colors_for_drawing); - for (int i = 0; i < (MAXVPOS + 1) * 2; i++) { - docols(color_tables[0] + i); - docols(color_tables[1] + i); - } -} + if (vidinfo->drawbuffer.inwidth > vidinfo->drawbuffer.width_allocated) + vidinfo->drawbuffer.inwidth = vidinfo->drawbuffer.width_allocated; + if (vidinfo->drawbuffer.inwidth2 > vidinfo->drawbuffer.width_allocated) + vidinfo->drawbuffer.inwidth2 = vidinfo->drawbuffer.width_allocated; -static bool isehb(uae_u16 bplcon0, uae_u16 bplcon2) -{ - bool bplehb; - if (aga_mode) { - bplehb = (bplcon0 & 0x7010) == 0x6000; - } else if (ecs_denise) { - bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000); - } else { - bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000) && !denisea1000_noehb; - } - return bplehb; -} + if (vidinfo->drawbuffer.inheight > vidinfo->drawbuffer.height_allocated) + vidinfo->drawbuffer.inheight = vidinfo->drawbuffer.height_allocated; + if (vidinfo->drawbuffer.inheight2 > vidinfo->drawbuffer.height_allocated) + vidinfo->drawbuffer.inheight2 = vidinfo->drawbuffer.height_allocated; -// OCS/ECS, lores, 7 planes = 4 "real" planes + BPL5DAT and BPL6DAT as static 5th and 6th plane -STATIC_INLINE int isocs7planes(void) -{ - return !aga_mode && bplcon0_res == 0 && bplcon0_planes == 7; -} + vidinfo->drawbuffer.outwidth = vidinfo->drawbuffer.inwidth; + vidinfo->drawbuffer.outheight = vidinfo->drawbuffer.inheight; -int get_sprite_dma_rel(int hpos, int off) -{ - int offset = get_rga_pipeline(hpos, off); - uae_u16 v = cycle_line_pipe[offset]; - if (v & CYCLE_PIPE_SPRITE) { - return v & 7; - } - return -1; -} + if (vidinfo->drawbuffer.outwidth > vidinfo->drawbuffer.width_allocated) + vidinfo->drawbuffer.outwidth = vidinfo->drawbuffer.width_allocated; -int get_bitplane_dma_rel(int hpos, int off) -{ - int offset = get_rga_pipeline(hpos, off); - uae_u16 v = cycle_line_pipe[offset]; - if (v & CYCLE_PIPE_BITPLANE) { - return v & 0x0f; - } - return 0; -} + if (vidinfo->drawbuffer.outheight > vidinfo->drawbuffer.height_allocated) + vidinfo->drawbuffer.outheight = vidinfo->drawbuffer.height_allocated; -static void compute_shifter_mask(void) -{ - int shifter_size = 16 << (fetchmode + LORES_TO_SHRES_SHIFT - toscr_res); - shifter_mask = shifter_size - 1; + check_nocustom(); + + compute_vsynctime(); + + hblank_hz = (currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL) / (maxhpos + (linetoggle ? 0.5f : 0.0f)); + + write_log(_T("%s mode%s%s V=%.4fHz H=%0.4fHz (%dx%d+%d) IDX=%d (%s) D=%d RTG=%d/%d\n"), + isntsc ? _T("NTSC") : _T("PAL"), + islace ? _T(" lace") : _T(""), + doublescan > 0 ? _T(" dblscan") : _T(""), + vblank_hz, + hblank_hz, + maxhpos, maxvpos, lof_store ? 1 : 0, + cr ? cr->index : -1, + cr != NULL && cr->label != NULL ? cr->label : _T(""), + currprefs.gfx_apmode[ad->picasso_on ? 1 : 0].gfx_display, ad->picasso_on, ad->picasso_requested_on + ); + +#ifdef PICASSO96 + init_hz_p96(0); +#endif + + set_config_changed(); + + if (currprefs.monitoremu_mon != 0) { + target_graphics_buffer_update(currprefs.monitoremu_mon, false); + } + if (target_graphics_buffer_update(0, false)) { + reset_drawing(); + } } -/* Expand bplcon0/bplcon1 into the toscr_xxx variables. */ -static void compute_toscr_delay(int bplcon1) +/* set PAL/NTSC or custom timing variables */ +static void init_beamcon0(void) { - int delay1 = (bplcon1 & 0x0f) | ((bplcon1 & 0x0c00) >> 6); - int delay2 = ((bplcon1 >> 4) & 0x0f) | (((bplcon1 >> 4) & 0x0c00) >> 6); - int delaymask = fetchmode_mask >> toscr_res; + int isntsc, islace; + int hpos = current_hpos(); + int oldmaxhpos = maxhpos; - compute_shifter_mask(); + beamcon0 = new_beamcon0; - toscr_delay_shifter[0] = (delay1 & delaymask) << LORES_TO_SHRES_SHIFT; - toscr_delay_shifter[1] = (delay2 & delaymask) << LORES_TO_SHRES_SHIFT; + doublescan = 0; + programmedmode = 0; - int shdelay1 = (bplcon1 >> 8) & 3; - int shdelay2 = (bplcon1 >> 12) & 3; - if (!currprefs.chipset_hr) { - // subpixel scrolling not possible - if (toscr_res == RES_HIRES) { - shdelay1 &= ~1; - shdelay2 &= ~1; - } else if (toscr_res == RES_LORES) { - shdelay1 &= ~3; - shdelay2 &= ~3; - } + isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; + islace = (interlace_seen) ? 1 : 0; + if (!ecs_agnus) { + isntsc = currprefs.ntscmode ? 1 : 0; } - toscr_delay_shifter[0] |= shdelay1; - toscr_delay_shifter[1] |= shdelay2; + beamcon0_pal = !isntsc; - if (toscr_delay_shifter[0] != toscr_delay_shifter[1] || 1) { - toscr_scanline_complex_bplcon1 = true; - toscr_scanline_complex_bplcon1_off = false; + if (currprefs.cs_hvcsync == 0) { + bemcon0_hsync_mask = BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN; + bemcon0_vsync_mask = BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN; + } else if (currprefs.cs_hvcsync == 1) { + bemcon0_hsync_mask = BEAMCON0_VARCSYEN; + bemcon0_vsync_mask = BEAMCON0_VARCSYEN; } else { - if (toscr_scanline_complex_bplcon1) { - toscr_scanline_complex_bplcon1_off = true; - } + bemcon0_hsync_mask = BEAMCON0_VARHSYEN; + bemcon0_vsync_mask = BEAMCON0_VARVSYEN; } + beamcon0_has_hsync = (beamcon0 & bemcon0_hsync_mask) != 0; + beamcon0_has_vsync = (beamcon0 & bemcon0_vsync_mask) != 0; + beamcon0_has_csync = (beamcon0 & BEAMCON0_VARCSYEN) != 0; + beamcon0_dual = (new_beamcon0 & BEAMCON0_DUAL) != 0; + agnus_equdis = ecs_agnus && ((beamcon0 & BEAMCON0_VARCSYEN) || (beamcon0 & BEAMCON0_BLANKEN)); -#if SPEEDUP - /* SPEEDUP code still needs this hack */ - int delayoffset = fetchmode_size - (((bpl_hstart - 0x18) & fetchstart_mask) << 1); - delay1 += delayoffset; - delay2 += delayoffset; - toscr_delay_adjusted[0] = (delay1 & delaymask) << toscr_res; - toscr_delay_adjusted[0] |= shdelay1 >> (RES_MAX - toscr_res); - toscr_delay_adjusted[1] = (delay2 & delaymask) << toscr_res; - toscr_delay_adjusted[1] |= shdelay2 >> (RES_MAX - toscr_res); - toscr_nr_planes = GET_PLANES_LIMIT(bplcon0); -#endif -} + float clk = (float)(currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL); -static void set_delay_lastcycle(void) -{ - delay_lastcycle[0] = (((maxhpos + 0) * 2) + 2) << LORES_TO_SHRES_SHIFT; - delay_lastcycle[1] = delay_lastcycle[0]; - if (linetoggle) { - delay_lastcycle[1] += 1 << LORES_TO_SHRES_SHIFT; + if (!isntsc) { + maxvpos = MAXVPOS_PAL; + maxhpos = MAXHPOS_PAL; + minfirstline = VBLANK_STOP_PAL; + vblank_hz_nom = vblank_hz = VBLANK_HZ_PAL; + vblank_hz_shf = clk / ((maxvpos + 0.0f) * maxhpos); + vblank_hz_lof = clk / ((maxvpos + 1.0f) * maxhpos); + vblank_hz_lace = clk / ((maxvpos + 0.5f) * maxhpos); + } else { + maxvpos = MAXVPOS_NTSC; + maxhpos = MAXHPOS_NTSC; + minfirstline = VBLANK_STOP_NTSC; + vblank_hz_nom = vblank_hz = VBLANK_HZ_NTSC; + float half = (beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f; + vblank_hz_shf = clk / ((maxvpos + 0.0f) * (maxhpos + half)); + vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); + vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); } - delay_hsynccycle = (((maxhpos + hsyncstartpos_start_cycles) * 2) - DDF_OFFSET) << LORES_TO_SHRES_SHIFT; -} -static void update_toscr_vars(void) -{ - toscr_res_pixels_shift = 2 - toscr_res; - toscr_res_pixels_shift_hr = 2 - currprefs.gfx_resolution; - if (currprefs.chipset_hr) { - if (toscr_res < currprefs.gfx_resolution) { - toscr_res_mult = currprefs.gfx_resolution - toscr_res; - } else { - toscr_res_mult = 0; - } - toscr_res_pixels_mask_hr = (1 << toscr_res_mult) - 1; - if (toscr_res > currprefs.gfx_resolution) { - toscr_res_pixels_shift_hr -= toscr_res - currprefs.gfx_resolution; - if (toscr_res_pixels_shift_hr < 0) { - toscr_res_pixels_shift_hr = 0; - } + display_hstart_cyclewait_end = 4; + if (beamcon0 & bemcon0_hsync_mask) { + display_hstart_cyclewait = 4; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + display_hstart_cyclewait_end = 0; } - toscr_res_pixels_hr = 1 << toscr_res_pixels_shift_hr; } else { - toscr_res_mult = 0; + display_hstart_cyclewait = 0; + if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + display_hstart_cyclewait = 30; + display_hstart_cyclewait_end = 6; + } else if (currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN) { + display_hstart_cyclewait = 32; + display_hstart_cyclewait_end = 8; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_EXTREME) { + display_hstart_cyclewait = 22; + display_hstart_cyclewait_end = 0; + } } - toscr_res_pixels = 1 << toscr_res_pixels_shift; - toscr_res2p = 2 << toscr_res; -} - -/* fetchstart_mask can be larger than fm_maxplane if FMODE > 0. - This means that the remaining cycles are idle. - */ -static const uae_u8 bpl_sequence_8[32] = { 8, 4, 6, 2, 7, 3, 5, 1 }; -static const uae_u8 bpl_sequence_4[32] = { 4, 2, 3, 1 }; -static const uae_u8 bpl_sequence_2[32] = { 2, 1 }; -static const uae_u8 *bpl_sequence; - -/* set currently active Agnus bitplane DMA sequence */ -static void setup_fmodes(int hpos, uae_u16 con0) -{ - switch (fmode & 3) - { - case 0: - fetchmode = 0; - break; - case 1: - case 2: - fetchmode = 1; - break; - case 3: - fetchmode = 2; - break; + if (beamcon0 & BEAMCON0_VARBEAMEN) { + // programmable scanrates (ECS Agnus) + if (vtotal >= MAXVPOS) { + vtotal = MAXVPOS - 1; + } + maxvpos = vtotal + 1; + maxhpos = htotal + 1; } - if (GET_RES_AGNUS(con0) != GET_RES_DENISE(con0)) { - SET_LINE_CYCLEBASED(hpos); + + // after vsync, it seems earlier possible visible line is vsync+3. + vsync_startline = 3; + if ((beamcon0 & BEAMCON0_VARVBEN) && (beamcon0 & bemcon0_vsync_mask)) { + vsync_startline += vsstrt; + if (vsync_startline >= maxvpos / 2) { + vsync_startline = 3; + } } - bplcon0_res = GET_RES_AGNUS(con0); - toscr_res_old = -1; - update_toscr_vars(); - bplcon0_planes = GET_PLANES(con0); - bplcon0_planes_limit = GET_PLANES_LIMIT(con0); - fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; - fetchunit_mask = fetchunit - 1; - fetchstart_shift = fetchstarts[fetchmode * 4 + bplcon0_res]; - fetchstart = 1 << fetchstart_shift; - fetchstart_mask = fetchstart - 1; - fm_maxplane_shift = fm_maxplanes[fetchmode * 4 + bplcon0_res]; - fm_maxplane = 1 << fm_maxplane_shift; - switch (fm_maxplane) { - default: - case 8: - bpl_sequence = bpl_sequence_8; - break; - case 4: - bpl_sequence = bpl_sequence_4; - break; - case 2: - bpl_sequence = bpl_sequence_2; - break; - } - fetch_modulo_cycle = fetchunit - fetchstart; - fetchmode_size = 16 << fetchmode; - fetchmode_bytes = 2 << fetchmode; - fetchmode_mask = fetchmode_size - 1; - fetchmode_fmode_bpl = fmode & 3; - fetchmode_fmode_spr = (fmode >> 2) & 3; - compute_toscr_delay(bplcon1); + maxvpos_nom = maxvpos; + maxvpos_display = maxvpos; - if (thisline_decision.plfleft < 0) { - thisline_decision.bplres = output_res(bplcon0_res); - thisline_decision.bplcon0 = con0; - thisline_decision.nr_planes = bplcon0_planes; - } + // calculate max possible display width in lores pixels + if ((beamcon0 & BEAMCON0_VARBEAMEN) && beamcon0_has_hsync) { + int hsstrt_delay = 2; + // assume VGA-like monitor if VARBEAMEN + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + maxhpos_display = maxhpos + 7; + if (beamcon0_has_hsync) { + hsstop_detect = hsstrt * 2; + if (hsstop_detect > maxhpos / 2 * 2 || hsstop_detect < 4 * 2) { + hsstop_detect = 4 * 2; + } + } else { + hsstop_detect = 4 * 2; + } + minfirstline = 0; + } else { + int hp2 = maxhpos * 2; + int hbstrtx, hbstopx; + if (exthblanken) { - curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; - estimate_last_fetch_cycle(hpos); - toscr_nr_planes_agnus = bplcon0_planes; - if (isocs7planes()) { - toscr_nr_planes_agnus = 6; - } - SET_LINE_CYCLEBASED(hpos); -} + int hb = 1; + hbstrtx = (hbstrt & 0xff) * 2; + hbstopx = (hbstop & 0xff) * 2; + if (aga_mode) { + hbstrtx |= (hbstrt & 0x400) ? 1 : 0; + hbstopx |= (hbstop & 0x400) ? 1 : 0; + } + if (hbstrtx > hp2) { + hbstrtx = hp2; + } + if (hbstopx > hp2) { + hbstopx = hp2; + } + if (hbstrtx > hp2 / 2 && hbstopx < hp2 / 2) { + hb = (hp2 - hbstrtx) + hbstopx; + } else if (hbstopx < hp2 / 2 && hbstrtx < hbstopx) { + hb = hbstopx - hbstrtx; + } + if (hbstopx > hp2 / 2) { + hbstopx = 0; + } + if (hb < 1) { + hb = 1; + } -static int REGPARAM2 custom_wput_1(int hpos, uaecptr addr, uae_u32 value, int noget); +#if 0 + // HSYNC adjustment + int hsz = 0; + if (hsstrt > maxhpos / 2 && hsstop > hsstrt) { + hsz = hsstop - hsstrt; + } else if (hsstrt > maxhpos / 2 && hsstop < maxhpos / 2) { + hsz = (maxhpos - hsstrt) - hsstop; + } else if (hsstop < maxhpos / 2 && hsstrt < hsstop) { + hsz = hsstop - hsstrt; + } +#endif + maxhpos_display = maxhpos - ((hb + 1) / 2); -static uae_u16 get_strobe_reg(int slot) -{ - uae_u16 strobe = 0x1fe; - if (slot == 0) { - strobe = 0x3c; - if (vb_start_line > 1 && vpos < get_equ_vblank_endline() && vpos >= get_equ_vblank_startline()) { - strobe = 0x38; - if (vpos == 0) { - if (agnusa1000) { - strobe = 0x3c; - } else if (!ecs_agnus) { - strobe = 0x3a; + hsstop_detect = hbstopx / 2; + + } else { + + // hardwired + hbstrtx = 0x10; + hbstopx = ecs_denise ? 0x5d : 0x5e; + int hb = hbstopx - hbstrtx; + maxhpos_display = maxhpos - (hb / 2); + if (beamcon0_has_hsync) { + hsstop_detect = hsstrt * 2; + } else { + hsstop_detect = hsstop_detect2; + } + } + + display_hstart_cyclewait = 0; + display_hstart_cyclewait_end = 0; + if (hbstopx / 2 > hsstrt && (hbstopx / 2 - hsstrt < maxhpos / 2)) { + display_hstart_cyclewait = hbstopx / 2 - hsstrt; + } else if (hsstrt - hbstopx / 2 < maxhpos / 2) { + display_hstart_cyclewait = hsstrt - hbstopx / 2; + } + display_hstart_cyclewait += hsstrt_delay; + + if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME) { + int diff = (maxhpos - 2) - maxhpos_display; + if (diff > 0) { + hsstop_detect -= (diff / 2) * 2; } + maxhpos_display = maxhpos - 2; + //maxvpos_display_vsync += 2; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + maxhpos_display += 8 * EXTRAWIDTH_BROADCAST; + display_hstart_cyclewait -= 4; + display_hstart_cyclewait_end -= 4; + hsstop_detect -= 4; + //maxvpos_display_vsync++; } - } else if (vb_start_line > 1 || vb_end_line || vb_end_next_line) { - strobe = 0x3a; + + maxhpos_display *= 2; } - } else if (slot == 1 && ecs_agnus && lol) { - strobe = 0x3e; - } - return strobe; -} -static uae_u16 fetch16(uaecptr p, int nr) -{ - uae_u16 v; - if (aga_mode) { - // AGA always does 32-bit fetches, this is needed - // to emulate 64 pixel wide sprite side-effects. - uae_u32 vv = chipmem_lget_indirect(p & ~3); - if (p & 2) { - v = (uae_u16)vv; - if (nr >= 0) { - fetched_aga_spr[nr] = (v << 16) | v; + } else if (!(beamcon0 & BEAMCON0_VARBEAMEN)) { + + maxhpos_display = AMIGA_WIDTH_MAX; + hsstop_detect = hsstop_detect2; + + if (beamcon0 & bemcon0_hsync_mask) { + if (currprefs.gfx_overscanmode < OVERSCANMODE_BROADCAST) { + hsstop_detect += 7; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + hsstop_detect += 5; + } else if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + maxhpos_display += EXTRAWIDTH_ULTRA; + minfirstline = 0; + hsstop_detect = hsyncstartpos_start_cycles * 2 - 4; } } else { - v = vv >> 16; - if (nr >= 0) { - fetched_aga_spr[nr] = vv; + + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + maxhpos_display += EXTRAWIDTH_ULTRA; + hsstop_detect = 18 * 2; + minfirstline = 1; } } - } else { - v = chipmem_wget_indirect(p); - } -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value(v); + } - if (debug_dma) { - record_dma_read_value(v); + + if (!(beamcon0 & BEAMCON0_VARBEAMEN) || !beamcon0_has_hsync) { + if (currprefs.gfx_overscanmode < OVERSCANMODE_BROADCAST) { + // one pixel row missing from right border if OCS + if (!ecs_denise) { + maxhpos_display--; + } + minfirstline++; + if (maxvpos_display_vsync > 0) { + maxvpos_display_vsync--; + } else { + maxvpos_display--; + } + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + maxhpos_display += EXTRAWIDTH_EXTREME; + hsstop_detect -= 4; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + maxhpos_display += EXTRAWIDTH_BROADCAST; + hsstop_detect -= 1; + } } -#endif - return v; -} -static uae_u32 fetch32(uaecptr p) -{ - uae_u32 v; - uaecptr pm = p & ~3; - if (p & 2) { - v = chipmem_lget_indirect(pm) & 0x0000ffff; - v |= v << 16; - } else if (fetchmode_fmode_bpl & 2) { // optimized (fetchmode_fmode & 3) == 2 - v = chipmem_lget_indirect(pm) & 0xffff0000; - v |= v >> 16; - } else { - v = chipmem_lget_indirect(pm); + if (currprefs.gfx_extrawidth > 0) { + maxhpos_display += currprefs.gfx_extrawidth; } -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value_long(v, p - pm); + + if (hsstop_detect < 0) { + hsstop_detect = 0; } - if (debug_dma) { - record_dma_read_value_wide(v, false); + if (minfirstline < 0) { + minfirstline = 0; } -#endif - return v; -} -static uae_u64 fetch64(uaecptr p) -{ - uae_u64 v; - uaecptr pm = p & ~7; - uaecptr pm1, pm2; - if (p & 4) { - pm1 = pm + 4; - pm2 = pm + 4; - } else { - pm1 = pm; - pm2 = pm + 4; + int minfirstline_hw = minfirstline; + maxvpos_display_vsync = 0; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + minfirstline = 0; + minfirstline_hw = 0; + maxvpos_display_vsync = vsync_startline; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_EXTREME) { + minfirstline_hw -= EXTRAHEIGHT_EXTREME / 2; + minfirstline -= EXTRAHEIGHT_EXTREME / 2; + maxvpos_display_vsync += 2; + } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { + minfirstline_hw -= EXTRAHEIGHT_BROADCAST_TOP; + maxvpos_display_vsync++; } - if (p & 2) { - uae_u32 v1 = chipmem_lget_indirect(pm1) & 0x0000ffff; - uae_u32 v2 = chipmem_lget_indirect(pm2) & 0x0000ffff; - v1 |= v1 << 16; - v2 |= v2 << 16; - v = (((uae_u64)v1) << 32) | v2; - } else { - v = ((uae_u64)chipmem_lget_indirect(pm1)) << 32; - v |= chipmem_lget_indirect(pm2); + if (beamcon0 & BEAMCON0_VARBEAMEN) { + minfirstline_hw = 0; } -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value_long((uae_u32)(v >> 32), p - pm1); - debug_getpeekdma_value_long((uae_u32)(v >> 0), p - pm2); + + if ((beamcon0 & BEAMCON0_VARVBEN) && (beamcon0 & bemcon0_vsync_mask)) { + minfirstline = vsync_startline; + if (minfirstline > maxvpos / 2) { + minfirstline = vsync_startline; + } + minfirstline++; + } else if (beamcon0 & BEAMCON0_VARVBEN) { + if (minfirstline > vbstop) { + minfirstline = vbstop; + if (minfirstline < 3) { + minfirstline = 3; + } + } } - if (debug_dma) { - record_dma_read_value_wide(v, true); + if (beamcon0 & (BEAMCON0_VARVBEN | bemcon0_vsync_mask)) { + programmedmode = 2; } -#endif - return v; -} - -// Nasty chipset bitplane/sprite DMA conflict bug -// -// If bitplane DMA ends before sprite slots and last bitplane slot also has active sprite slot, sprite DMA is not stolen by bitplane DMA but sprite DMA conflicts with bitplane DMA: -// Target DMA custom register becomes AND of last bitplane BPLxDAT register and conflicting sprite register, for example 0x110 (BPL1DAT) & 0x168 (SPR5POS) = 0x100 (BPLCON0). -// Source DMA address becomes OR of bitplane and sprite pointer addresses. -// DMA reads word (or larger if FMODE>0) from OR'd DMA address and writes it to new target custom register. -// Bitplane +2/+4/+8 and possible modulo is added to OR'd DMA address. -// DMA address gets written back to both bitplane and sprite pointers. -// This is fully repeatable, no random side-effects noticed. -static int bplsprchipsetbug(int nr, int fm, int hpos) -{ - uae_u16 breg = 0x110 + nr * 2; - uae_u16 sreg = sprbplconflict; - uae_u16 creg = breg & sreg; - int snum = (sreg - 0x140) / 8; - uaecptr px = bplpt[nr] | spr[snum].pt; - - if (creg < 0x110 || creg >= 0x120) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(creg, px, hpos, vpos, DMARECORD_BITPLANE, nr); + int eh = currprefs.gfx_extraheight; + if (eh > 0) { + if (beamcon0 & bemcon0_vsync_mask) { + minfirstline -= eh / 2; + } else { + minfirstline -= eh / 2; } -#endif } - uae_u64 v; - uae_u16 v2; - if (fm == 0) { - v = fetch16(px, -1); - v2 = (uae_u16)v; - } else if (fm == 1) { - v = fetch32(px); - v2 = (uae_u16)(v >> 16); - } else { - v = fetch64(px); - v2 = v >> 48; + if (display_hstart_cyclewait_end < 0) { + display_hstart_cyclewait_end = 0; } - bplpt[nr] = px; - if (creg < 0x110 || creg >= 0x120) { - custom_wput_1(hpos, creg, v2, 1); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value_wide(v, false); - record_dma_read(breg, px, hpos, vpos, DMARECORD_BITPLANE, nr); - } -#endif - nr = -1; + if (minfirstline < vsync_startline) { + minfirstline = vsync_startline; + } - } else { + if (minfirstline >= maxvpos) { + minfirstline = maxvpos - 1; + } - uaecptr px = bplpt[nr] | spr[snum].pt; - spr[snum].pt = px; - bplpt[nr] = px; + if (minfirstline < minfirstline_hw) { + minfirstline = minfirstline_hw; + } - nr = (creg - 0x110) / 2; + if (beamcon0 & bemcon0_vsync_mask) { + if (minfirstline < vsync_startline) { + minfirstline = vsync_startline; + } } - return nr; -} + if (beamcon0 & BEAMCON0_VARBEAMEN) { + float half = (beamcon0 & BEAMCON0_PAL) ? 0: ((beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f); + vblank_hz_nom = vblank_hz = clk / (maxvpos * (maxhpos + half)); + vblank_hz_shf = vblank_hz; + vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); + vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); -bool get_ras_cas(uaecptr addr, int *rasp, int *casp) -{ - int ras, cas; - bool ret = false; - if (aga_mode) { - ras = (((addr >> 12) & 127) << 1) | ((addr >> 9) & 1); - cas = (addr >> 0) & 0xff; - if ((addr >> 8) & 1) { - ras |= 0x100; - } - if ((addr >> 19) & 1) { - ras |= 0x200; - } - if ((addr >> 10) & 1) { - cas |= 0x100; - } - if ((addr >> 11) & 1) { - cas |= 0x200; - } - } else if (ecs_agnus && currprefs.chipmem.size > 0x100000) { - ras = (addr >> 9) & 0x1ff; - cas = (addr >> 1) & 0xff; - if ((addr >> 19) & 1) { - ras |= 0x200; - } - if ((addr >> 18) & 1) { - cas |= 0x100; - } - } else if (ecs_agnus) { - ras = (addr >> 9) & 0x1ff; - cas = (addr >> 1) & 0xff; - if ((addr >> 19) & 1) { - ret = true; - } - if ((addr >> 18) & 1) { - cas |= 0x100; - } - } else { - ras = (addr >> 1) & 0xff; - cas = (addr >> 9) & 0xff; - if ((addr >> 17) & 1) { - ras |= 0x100; - } - if ((addr >> 18) & 1) { - cas |= 0x100; + maxvpos_nom = maxvpos; + maxvpos_display = maxvpos; + + programmedmode = 2; + if ((htotal < 226 || htotal > 229) || (vtotal < 256 || vtotal > 320)) { + doublescan = htotal <= 164 && vtotal >= 350 ? 1 : 0; + // if superhires and wide enough: not doublescan + if (doublescan && htotal >= 140 && (bplcon0 & 0x0040)) + doublescan = 0; + programmedmode = 1; } } - *rasp = ras; - *casp = cas; - return ret; -} - -static uaecptr update_refptr(int slot, int end, bool process, bool overwrite) -{ - if (refptr_preupdated) { - refptr_preupdated = false; - refptr = refptr_p; + if (maxvpos_nom >= MAXVPOS) { + maxvpos_nom = MAXVPOS; } - - uaecptr rp = refptr; - for (int i = slot + 1; i < end; i++) { - if (!(refresh_handled_slot & (1 << i))) { -#ifdef DEBUGGER - if (debug_dma) { - int hp = REFRESH_FIRST_HPOS + i * 2; - if (overwrite || (!overwrite && !record_dma_check(hp, vpos))) { - uae_u16 strobe = get_strobe_reg(i); - record_dma_clear(hp, vpos); - record_dma_read(strobe, rp & refmask, hp, vpos, DMARECORD_REFRESH, i); - record_dma_read_value(0xffff); - } - } -#endif - rp += ref_ras_add; - } - if (process) { - refresh_handled_slot |= 1 << i; - } + if (maxvpos_display >= MAXVPOS) { + maxvpos_display = MAXVPOS; } - return rp; -} - -// Strobe+refresh (always first, second possible if ECS and NTSC) slot conflict -static void fetch_strobe_conflict(int nr, int fm, int hpos, bool addmodulo) -{ - int slot = (hpos - REFRESH_FIRST_HPOS) / 2; - static int warned1 = 30; - - refptr = update_refptr(-1, slot, true, true); - refresh_handled_slot |= 1 << slot; - - uae_u16 rreg = get_strobe_reg(slot); - uae_u16 breg = 0x110 + nr * 2; - uae_u16 creg = rreg & breg; - - uaecptr bplptx = bplpt[nr]; - uaecptr refptx = refptr; - uaecptr px = bplptx | refptx; - - if (creg != rreg) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_clear(hpos, vpos); - record_dma_read(creg, px, hpos, vpos, DMARECORD_REFRESH, nr); - } -#endif + if (currprefs.gfx_scandoubler && doublescan == 0) { + doublescan = -1; } - -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value_wide(0xffff, false); - record_dma_read(breg, px, hpos, vpos, DMARECORD_BITPLANE, nr); + /* limit to sane values */ + if (vblank_hz < 10) { + vblank_hz = 10; } -#endif - - if (addmodulo) { - // modulo is OR'd with REF_RAS_ADD - bplpt[nr] = px; - uae_s16 m1 = bpl1mod, m2 = bpl2mod; - uae_s16 m3 = bpl1mod_prev, m4 = bpl2mod_prev; - bpl1mod |= ref_ras_add; - bpl2mod |= ref_ras_add; - bpl1mod_prev |= ref_ras_add; - bpl2mod_prev |= ref_ras_add; - add_modulo(hpos, nr); - bpl1mod = m1; bpl2mod = m2; - bpl1mod_prev = m3; bpl2mod_prev = m4; - px = bplpt[nr]; - } else { - px += ref_ras_add; + if (vblank_hz > 300) { + vblank_hz = 300; } - - px &= refmask; - bplpt[nr] = px; - refptr = px; - update_refptr(slot, 4, false, true); - - if (warned1 >= 0) { - write_log(_T("WARNING: BPL strobe refresh conflict, slot %d!\n"), slot); - warned1--; + maxhpos_short = maxhpos; + updateextblk(); + maxvpos_total = ecs_agnus ? (MAXVPOS_LINES_ECS - 1) : (MAXVPOS_LINES_OCS - 1); + if (maxvpos_total > MAXVPOS) { + maxvpos_total = MAXVPOS; } - // decide sprites before sprite offset change - decide_sprites(hpos + 1, true, false); - - hstrobe_conflict = true; + minfirstline_linear = minfirstline - (vsync_startline > 0 ? vsync_startline : 0); +} - SET_LINE_CYCLEBASED(hpos); +static void init_hz_reset(void) +{ + linear_vpos = currprefs.ntscmode ? MAXVPOS_NTSC : MAXVPOS_PAL; + linear_hpos = currprefs.ntscmode ? MAXHPOS_NTSC : MAXHPOS_PAL; + linear_vpos += lof_store; + linear_vpos -= vsync_startline; + linear_vpos_prev[0] = linear_vpos; + linear_vpos_prev[1] = linear_vpos; + linear_vpos_prev[2] = linear_vpos; + linear_hpos_prev[0] = linear_hpos; + linear_hpos_prev[1] = linear_hpos; + linear_hpos_prev[2] = linear_hpos; + current_linear_vpos = linear_vpos; + current_linear_hpos = linear_hpos; + init_hz(); } -// refresh only slot conflict -static void fetch_refresh_conflict(int nr, int fm, int hpos, bool addmodulo) +void init_hz(void) { - int slot = (hpos - REFRESH_FIRST_HPOS) / 2; - static int warned1 = 30; + int isntsc, islace; + int odbl = doublescan; + double ovblank = vblank_hz; + int hzc = 0; + int omaxhpos = maxhpos; + int omaxvpos = maxvpos; - refptr = update_refptr(-1, slot, true, true); - refresh_handled_slot |= 1 << slot; + isntsc = (new_beamcon0 & BEAMCON0_PAL) ? 0 : 1; + islace = (interlace_seen) ? 1 : 0; + if (!ecs_agnus) { + isntsc = currprefs.ntscmode ? 1 : 0; + } - uaecptr bplptx = bplpt[nr]; - uaecptr refptx = refptr; - uaecptr px = bplptx | refptx; - uaecptr p = px; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_clear(hpos, vpos); - record_dma_read(0x1fe, px, hpos, vpos, DMARECORD_REFRESH, slot); + if ((beamcon0 & (BEAMCON0_VARBEAMEN | BEAMCON0_PAL)) != (new_beamcon0 & (BEAMCON0_VARBEAMEN | BEAMCON0_PAL))) { + hzc = 1; } -#endif - - if (addmodulo) { - // modulo is OR'd with REF_RAS_ADD - bplpt[nr] = px; - uae_s16 m1 = bpl1mod, m2 = bpl2mod; - uae_s16 m3 = bpl1mod_prev, m4 = bpl2mod_prev; - bpl1mod |= ref_ras_add; - bpl2mod |= ref_ras_add; - bpl1mod_prev |= ref_ras_add; - bpl2mod_prev |= ref_ras_add; - add_modulo(hpos, nr); - bpl1mod = m1; bpl2mod = m2; - bpl1mod_prev = m3; bpl2mod_prev = m4; - px = bplpt[nr]; - } else { - px += ref_ras_add; + if ((beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) != (new_beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN))) { + hzc = 1; } - px &= refmask; - bplpt[nr] = px; - refptr = px; - update_refptr(slot, 4, false, true); + init_beamcon0(); - if (warned1 >= 0) { - write_log(_T("WARNING: BPL refresh conflict, slot %d!\n"), slot); - warned1--; + if (doublescan != odbl || maxvpos != omaxvpos) { + hzc = 1; } - SET_LINE_CYCLEBASED(hpos); + if (hzc) { + interlace_seen = islace; + reset_drawing(); + } -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x110 + nr * 2, p, hpos, vpos, DMARECORD_BITPLANE, nr); + if (maxvpos != omaxvpos || maxhpos != omaxhpos) { + nosignal_trigger = true; } - if (memwatch_enabled) { - debug_getpeekdma_chipram(p, MW_MASK_BPL_0 << nr, 0x110 + nr * 2, 0xe0 + nr * 4); + +#ifdef PICASSO96 + if (!p96refresh_active) { + maxvpos_stored = maxvpos; + maxhpos_stored = maxhpos; + vblank_hz_stored = vblank_hz; } #endif - switch (fm) - { - case 0: - { - fetched_aga[nr] = fetched[nr] = 0xffff; - regs.chipset_latch_rw = 0xffff; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - break; - } -#ifdef AGA - case 1: - { - fetched_aga[nr] = 0xffffffff; - regs.chipset_latch_rw = (uae_u32)fetched_aga[nr]; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - fetched[nr] = (uae_u16)fetched_aga[nr]; - break; - } - case 2: - { - fetched_aga[nr] = 0xffffffffffffffff; - regs.chipset_latch_rw = (uae_u32)fetched_aga[nr]; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - fetched[nr] = (uae_u16)fetched_aga[nr]; - break; - } -#endif + compute_framesync(); + devices_syncchange(); + + if (vblank_hz != ovblank) { + updatedisplayarea(0); + } + inputdevice_tablet_strobe(); + + if (varsync_changed > 0) { + varsync_changed = 0; + dumpsync(); } } -static bool fetch(int nr, int fm, int hpos, bool addmodulo) +static void calcvdiw(void) { - bool sprbplconflict = false; - bool stroberefbplconflict = false; - bool refbplconflict = false; - int snum = 0; - - uae_u8 dmaslot = cycle_line_slot[hpos]; - uaecptr p = bplpt[nr]; + int vstrt = diwstrt >> 8; + int vstop = diwstop >> 8; - if (dmaslot > CYCLE_BITPLANE) { - if (dmaslot == CYCLE_STROBE) { - // strobe refresh conflict - fetch_strobe_conflict(nr, fm, hpos, addmodulo); - return false; - } else if (dmaslot == CYCLE_REFRESH) { - // refresh conflict - fetch_refresh_conflict(nr, fm, hpos, addmodulo); - return nr == 0; - } else if (dmaslot == CYCLE_MISC) { - // DMAL conflict - // AUDxDAT AND BPLxDAT = read-only register - // DSKDATR AND BLPxDAT = read-only register - // DSKDAT AND BPLxDAT = read-only register - return false; + // ECS Agnus/AGA: DIWHIGH vertical high bits. + if (diwhigh_written && ecs_agnus) { + if (aga_mode) { + vstrt |= (diwhigh & 7) << 8; + vstop |= ((diwhigh >> 8) & 7) << 8; + } else { + // ECS Agnus has undocumented V11! + vstrt |= (diwhigh & 15) << 8; + vstop |= ((diwhigh >> 8) & 15) << 8; } } else { - if (hpos == sprbplconflict_hpos) { - nr = bplsprchipsetbug(nr, fm, hpos); - if (nr < 0) { - return false; - } - p = bplpt[nr]; - } - - // normal BPL cycle - cycle_line_slot[hpos] = CYCLE_BITPLANE; - - bplpt[nr] += fetchmode_bytes; - bplptx[nr] += fetchmode_bytes; - if (addmodulo) { - add_modulo(hpos, nr); - } - - } - -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x110 + nr * 2, p, hpos, vpos, DMARECORD_BITPLANE, nr); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(p, MW_MASK_BPL_0 << nr, 0x110 + nr * 2, 0xe0 + nr * 4); - } -#endif - - switch (fm) - { - case 0: - { - uae_u16 v = fetch16(p, nr); - fetched_aga[nr] = fetched[nr] = v; - regs.chipset_latch_rw = v; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - break; - } -#ifdef AGA - case 1: - { - fetched_aga[nr] = fetch32(p); - regs.chipset_latch_rw = (uae_u32)fetched_aga[nr]; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - fetched[nr] = (uae_u16)fetched_aga[nr]; - break; - } - case 2: - { - fetched_aga[nr] = fetch64(p); - regs.chipset_latch_rw = (uae_u32)fetched_aga[nr]; - last_custom_value = (uae_u16)regs.chipset_latch_rw; - fetched[nr] = (uae_u16)fetched_aga[nr]; - break; - } -#endif + if ((vstop & 0x80) == 0) + vstop |= 0x100; } - return nr == 0; + plffirstline = vstrt; + plflastline = vstop; } -STATIC_INLINE void toscr_3_ecs(int oddeven, int step, int nbits) +/* display mode changed (lores, doubling etc..), recalculate everything */ +void init_custom(void) { - int shift = 16 - nbits; - - for (int i = oddeven; i < toscr_nr_planes2 && nbits; i += step) { - outword[i] <<= nbits; - outword[i] |= todisplay2[i] >> shift; - todisplay2[i] <<= nbits; - } + check_nocustom(); + update_mirrors(); + create_cycle_diagram_table(); + reset_drawing(); + init_hz(); } -#ifdef AGA +static int timehack_alive = 0; -STATIC_INLINE void toscr_3_aga(int oddeven, int step, int nbits, int fm_size) +static uae_u32 REGPARAM2 timehack_helper(TrapContext *context) { - uae_u32 mask = 0xFFFF >> (16 - nbits); - int shift = fm_size - nbits; - - if (shift == 64) { - for (int i = oddeven; i < toscr_nr_planes2; i += step) { - outword[i] <<= nbits; - todisplay2_aga[i] <<= nbits; - } - } else { - for (int i = oddeven; i < toscr_nr_planes2 && bits; i += step) { - outword[i] <<= nbits; - outword[i] |= (todisplay2_aga[i] >> shift) & mask; - todisplay2_aga[i] <<= nbits; - } +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + if (m68k_dreg(regs, 0) == 0) { + return timehack_alive; } -} -// very, very slow and unoptimized.. -STATIC_INLINE void toscr_3_aga_hr(int oddeven, int step, int nbits, int fm_size_minusone) -{ - for (int i = oddeven; i < toscr_nr_planes2; i += step) { - int subpix = out_subpix[oddeven]; - for (int j = 0; j < nbits; j++) { - uae_u32 bit = (todisplay2_aga[i] >> fm_size_minusone) & 1; - outword64[i] <<= 1; - outword64[i] |= bit; - subpix++; - subpix &= toscr_res_pixels_mask_hr; - if (subpix == 0) { - todisplay2_aga[i] <<= 1; - } - } - } - out_subpix[oddeven] += nbits; -} + timehack_alive = 10; + gettimeofday(&tv, NULL); + put_long(m68k_areg(regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60)); + put_long(m68k_areg(regs, 0) + 4, tv.tv_usec); + return 0; +#else + return 2; #endif +} -static void toscr_2_0(int nbits) { toscr_3_ecs(0, 1, nbits); } -static void toscr_2_0_oe(int oddeven, int step, int nbits) { toscr_3_ecs(oddeven, step, nbits); } -#ifdef AGA -static void toscr_2_1(int nbits) { toscr_3_aga(0, 1, nbits, 32); } -static void toscr_2_1_oe(int oddeven, int step, int nbits) { toscr_3_aga(oddeven, step, nbits, 32); } -static void toscr_2_2(int nbits) { toscr_3_aga(0, 1, nbits, 64); } -static void toscr_2_2_oe(int oddeven, int step, int nbits) { toscr_3_aga(oddeven, step, nbits, 64); } - -static void toscr_2_0_hr(int nbits) { toscr_3_aga_hr(0, 1, nbits, 16 - 1); } -static void toscr_2_0_hr_oe(int oddeven, int step, int nbits) { toscr_3_aga_hr(oddeven, step, nbits, 16 - 1); } -static void toscr_2_1_hr(int nbits) { toscr_3_aga_hr(0, 1, nbits, 32 - 1); } -static void toscr_2_1_hr_oe(int oddeven, int step, int nbits) { toscr_3_aga_hr(oddeven, step, nbits, 32 - 1); } -static void toscr_2_2_hr(int nbits) { toscr_3_aga_hr(0, 1, nbits, 64 - 1); } -static void toscr_2_2_hr_oe(int oddeven, int step, int nbits) { toscr_3_aga_hr(oddeven, step, nbits, 64 - 1); } -#endif - -STATIC_INLINE void do_tosrc(int oddeven, int step, int nbits, int fm) +/* +* register functions +*/ +static uae_u16 DENISEID(int *missing) { - switch (fm) { - case 0: - if (step == 2) - toscr_2_0_oe(oddeven, step, nbits); - else - toscr_2_0(nbits); - break; + *missing = 0; + if (currprefs.cs_deniserev >= 0) { + return currprefs.cs_deniserev; + } #ifdef AGA - case 1: - if (step == 2) - toscr_2_1_oe(oddeven, step, nbits); - else - toscr_2_1(nbits); - break; - case 2: - if (step == 2) - toscr_2_2_oe(oddeven, step, nbits); - else - toscr_2_2(nbits); - break; + if (aga_mode) { + if (currprefs.cs_ide == IDE_A4000) { + return 0xFCF8; + } + return 0x00F8; + } #endif + if (ecs_denise) { + return 0xFFFC; } -} - -#ifdef AGA -STATIC_INLINE void do_tosrc_hr(int oddeven, int step, int nbits, int fm) -{ - switch (fm) { - case 0: - if (step == 2) - toscr_2_0_hr_oe(oddeven, step, nbits); - else - toscr_2_0_hr(nbits); - break; - case 1: - if (step == 2) - toscr_2_1_hr_oe(oddeven, step, nbits); - else - toscr_2_1_hr(nbits); - break; - case 2: - if (step == 2) - toscr_2_2_hr_oe(oddeven, step, nbits); - else - toscr_2_2_hr(nbits); - break; + if (currprefs.cpu_model == 68000 && (currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact)) { + *missing = 1; } + return 0xFFFF; } -#endif -STATIC_INLINE void do_delays_3_ecs(int nbits) -{ - int delaypos = delay_cycles; - for (int oddeven = 0; oddeven < 2; oddeven++) { - int delay = toscr_delay_shifter[oddeven]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc(oddeven, 2, diff, 0); - nbits2 -= diff; - if (todisplay_fetched & (oddeven + 1)) { - for (int i = oddeven; i < toscr_nr_planes_shifter; i += 2) { - todisplay2[i] = todisplay[i]; - } - todisplay_fetched -= oddeven + 1; - } +static bool blit_busy(bool dmaconr) +{ + // DMACONR latch load takes 1 cycle. Copper sees it immediately. + if (dmaconr) { + if (get_cycles() <= blt_info.finishcycle_dmacon) { + return true; } - if (nbits2) { - do_tosrc(oddeven, 2, nbits2, 0); + } else { + if (get_cycles() <= blt_info.finishcycle_copper) { + return true; } } -} - -STATIC_INLINE void do_delays_fast_3_ecs(int nbits) -{ - int delaypos = delay_cycles; - int delay = toscr_delay_shifter[0]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc(0, 1, diff, 0); - nbits2 -= diff; - if (todisplay_fetched) { - memcpy(todisplay2, todisplay, toscr_nr_planes_shifter * sizeof(uae_u32)); - todisplay_fetched = 0; + if (!blt_info.blit_main) { + return false; + } + // AGA apparently fixes both bugs. + if (agnusa1000) { + // Blitter busy bug: A1000 Agnus only sets busy-bit when blitter gets first DMA slot. + if (!blt_info.got_cycle) { + return false; } } - if (nbits2) { - do_tosrc(0, 1, nbits2, 0); + if (blt_info.blit_pending) { + return true; } + return true; } -STATIC_INLINE void do_delays_3_aga(int nbits, int fm) +STATIC_INLINE uae_u16 DMACONR(void) { - int delaypos = delay_cycles; - for (int oddeven = 0; oddeven < 2; oddeven++) { - int delay = toscr_delay_shifter[oddeven]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc(oddeven, 2, diff, fm); - nbits2 -= diff; - if (todisplay_fetched & (oddeven + 1)) { - for (int i = oddeven; i < toscr_nr_planes_shifter; i += 2) { - todisplay2_aga[i] = todisplay_aga[i]; - } - todisplay_fetched -= oddeven + 1; - } - } - if (nbits2) { - do_tosrc(oddeven, 2, nbits2, fm); - } - } + dmacon &= ~(0x4000 | 0x2000); + dmacon |= (blit_busy(true) ? 0x4000 : 0x0000) | (blt_info.blitzero ? 0x2000 : 0); + return dmacon; } - -static const uae_u64 firstpixel[] = { 0x8000, 0x80000000, 0x8000000000000000, 0x8000000000000000 }; - -STATIC_INLINE void do_delays_fast_3_aga(int nbits, int fm) +STATIC_INLINE uae_u16 INTENAR(void) { - int delaypos = delay_cycles; - int delay = toscr_delay_shifter[0]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc(0, 1, diff, fm); - nbits2 -= diff; - if (todisplay_fetched) { - int i; - for (i = 0; i < toscr_nr_planes_shifter; i++) { - todisplay2_aga[i] = todisplay_aga[i]; - todisplay2_lastbit[i] = todisplay_aga[i] & 1; - } - todisplay_fetched = 0; - // Chipset bug. if bitplane gets disabled mid-scanline and its last pixel in shifter - // is one, it gets duplicated. - if (toscr_nr_changed) { - while (i < toscr_nr_planes2) { - if (todisplay2_lastbit[i]) { - todisplay2_aga[i] = firstpixel[fm]; - todisplay2_lastbit[i] = 0; - } - i++; - } - } - } - } - if (nbits2) { - do_tosrc(0, 1, nbits2, fm); - } + return intena & 0x7fff; } - -static bool todisplay_copy_hr_oddeven(int oddeven, int fm) +uae_u16 INTREQR(void) { - if (todisplay_fetched & (oddeven + 1)) { - int i; - for (i = oddeven; i < toscr_nr_planes_shifter; i += 2) { - todisplay2_aga[i] = todisplay_aga[i]; - todisplay2_lastbit[i] = todisplay_aga[i] & 1; - } - todisplay_fetched -= oddeven + 1; - out_subpix[oddeven] = 0; - if (toscr_nr_changed) { - while (i < toscr_nr_planes2) { - if (todisplay2_lastbit[i]) { - todisplay2_aga[i] = firstpixel[fm]; - todisplay2_lastbit[i] = 0; - } - i += 2; - } - } - return true; - } - return false; + return intreq & 0x7fff; } - -STATIC_INLINE void do_delays_3_aga_hr2(int nbits, int fm) +STATIC_INLINE uae_u16 ADKCONR(void) { - int delaypos = delay_cycles; - for (int oddeven = 0; oddeven < 2; oddeven++) { - int delay = toscr_delay_shifter[oddeven]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift_hr; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc_hr(oddeven, 2, diff, fm); - nbits2 -= diff; - todisplay_copy_hr_oddeven(oddeven, fm); - } - if (nbits2) { - do_tosrc_hr(oddeven, 2, nbits2, fm); - } - } + return adkcon & 0x7fff; } -// This is very very slow. But really rarely needed. -static void pull_toscr_output_bits(int nbits, int planes, uae_u32 *ptrs) +STATIC_INLINE int islightpentriggered(void) { - uae_u64 mask = (1 << nbits) - 1; - if (out_nbits >= nbits) { - for (int i = 0; i < planes; i++) { - ptrs[i] = (uae_u32)(outword64[i] & mask); - } - return; - } - int tbits = nbits - out_nbits; - uae_u64 nmask = (1 << out_nbits) - 1; - for (int i = 0; i < planes; i++) { - ptrs[i] = 0; - uae_u64 v = outword64_extra[i]; - ptrs[i] = (uae_u32)((v << out_nbits) & mask); - ptrs[i] |= outword64[i] & nmask; - } + if (beamcon0 & BEAMCON0_LPENDIS) + return 0; + return lightpen_triggered != 0; } - -static void push_toscr_output_bits(int nbits, int planes, uae_u32 *ptrs) +STATIC_INLINE int issyncstopped(uae_u16 con0) { - uae_u64 mask = (1 << nbits) - 1; - if (out_nbits >= nbits) { - for (int i = 0; i < planes; i++) { - outword64[i] &= ~mask; - outword64[i] |= ptrs[i]; - } - return; - } - int tbits = nbits - out_nbits; - uae_u64 tmask = (1 << tbits) - 1; - uae_u64 nmask = (1 << out_nbits) - 1; - for (int i = 0; i < planes; i++) { - uae_u64 v = outword64_extra[i]; - v &= ~tmask; - v |= (ptrs[i] >> out_nbits) & tmask; - outword64_extra[i] = v; - outword64[i] &= ~nmask; - outword64[i] |= ptrs[i] & nmask; - } -} - -STATIC_INLINE void toscr_1_hr_nbits(void) -{ - if (out_offs < MAX_WORDS_PER_LINE * 2 / 4 - 1) { - uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; - for (int i = 0; i < toscr_nr_planes2; i++) { - uae_u64 *dataptr64 = (uae_u64 *)dataptr; - uae_u64 v = outword64[i]; -// uae_u64 v = outword64_extra[i]; -// outword64_extra[i] = outword64[i]; - v = (v >> 32) | (v << 32); - if (thisline_changed || *dataptr64 != v) { - thisline_changed = 1; - *dataptr64 = v; - } - dataptr += MAX_WORDS_PER_LINE * 2; - } - out_offs += 2; - } - out_nbits = 0; -} - -#define TOSCR_SPC_LORES 1 -#define TOSCR_SPC_HIRES 2 -#define TOSCR_SPC_LORES_END 16 -#define TOSCR_SPC_HIRES_END 32 -#define TOSCR_SPC_LORES_START 64 -#define TOSCR_SPC_HIRES_START 128 -#define TOSCR_SPC_CLEAR 256 -#define TOSCR_SPC_CLEAR2 512 -#define TOSCR_SPC_6HIRESTOLORES 1024 -#define TOSCR_SPC_SETHIRES 2048 -#define TOSCR_SPC_SETLORES 4096 -#define TOSCR_SPC_DUAL 8192 -#define TOSCR_SPC_MARK 16384 -#define TOSCR_SPC_SKIP 32768 - -static const uae_u16 toscr_spc_aga_lores_to_hires[] = -{ - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_HIRES_END, - 0, 0, 0, 0 -}; -static const uae_u16 toscr_spc_aga_hires_to_lores[] = -{ - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - 0, 0, 0, 0 -}; - -static const uae_u16 toscr_spc_ecs_lores_to_hires[] = -{ - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - 0, 0, 0, 0 -}; -static const uae_u16 toscr_spc_ecs_hires_to_lores[] = -{ - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END | TOSCR_SPC_6HIRESTOLORES, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - 0, 0, 0, 0 -}; - -#if 0 -static const uae_u16 toscr_spc_ocs_lores_to_hires[] = -{ - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR | TOSCR_SPC_DUAL, - - 0, 0, 0, 0 -}; - -static const uae_u16 toscr_spc_ocs_hires_to_lores[] = -{ - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_LORES | TOSCR_SPC_LORES_START | TOSCR_SPC_LORES_END, - 0, 0, 0, 0 -}; -#else + return (con0 & 2) && (!currprefs.genlock || currprefs.genlock_effects); +} -static const uae_u16 toscr_spc_ocs_lores_to_hires[] = +STATIC_INLINE int GETVPOS(void) { - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END | TOSCR_SPC_CLEAR, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - TOSCR_SPC_LORES | TOSCR_SPC_HIRES_START | TOSCR_SPC_HIRES_END, - 0, 0, 0, 0 -}; - -static const uae_u16 toscr_spc_ocs_hires_to_lores[] = -{ - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - TOSCR_SPC_HIRES | TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES_END, - 0, 0, 0, 0 -}; -#endif - - -static const uae_u16 *toscr_special_skip_ptr = NULL; + return islightpentriggered() ? vpos_lpen : (issyncstopped(bplcon0) ? vpos_previous : vpos); +} +STATIC_INLINE int GETHPOS(void) +{ + return islightpentriggered() ? hpos_lpen : (issyncstopped(bplcon0) ? hpos_previous : current_hpos()); +} -static int process_special_pixel(int delaypos, int fm, uae_u16 cmd) +// fake changing hpos when rom genlock test runs and genlock is connected +static bool hsyncdelay(void) { - int ret = 0; - int delay1 = (bplcon1 & 0x0f) | ((bplcon1 & 0x0c00) >> 6); - int delay2 = ((bplcon1 >> 4) & 0x0f) | (((bplcon1 >> 4) & 0x0c00) >> 6); - int delaymask, shiftmask; - if (cmd & TOSCR_SPC_LORES) { - delaymask = fetchmode_mask >> 0; - shiftmask = 63; - } else { - delaymask = fetchmode_mask >> 1; - shiftmask = 31; - } - if (cmd & TOSCR_SPC_HIRES_START) { - toscr_res_pixels_mask_hr = 1 >> toscr_res_pixels_shift_hr; - } - if (cmd & TOSCR_SPC_LORES_START) { - toscr_res_pixels_mask_hr = 3 >> toscr_res_pixels_shift_hr; - } - int shifter[2]; - shifter[0] = (delay1 & delaymask) << LORES_TO_SHRES_SHIFT; - shifter[1] = (delay2 & delaymask) << LORES_TO_SHRES_SHIFT; - for (int oddeven = 0; oddeven < 2; oddeven++) { - int delay = shifter[oddeven]; - int diff = ((delay - delaypos) & shiftmask) >> toscr_res_pixels_shift_hr; - if (diff == 0) { - if (todisplay_copy_hr_oddeven(oddeven, fm)) { - ret |= 1 << oddeven; - } - } - do_tosrc_hr(oddeven, 2, 1, fm); + if (!currprefs.genlock || currprefs.genlock_effects) { + return false; } - if (cmd & TOSCR_SPC_LORES_END) { - toscr_res_pixels_mask_hr = 3 >> toscr_res_pixels_shift_hr; + if (currprefs.cpu_memory_cycle_exact || currprefs.m68k_speed >= 0) { + return false; } - if (cmd & TOSCR_SPC_HIRES_END) { - toscr_res_pixels_mask_hr = 1 >> toscr_res_pixels_shift_hr; + if (bplcon0 == (0x0100 | 0x0002)) { + return true; } - return ret; + return false; } -static void flush_display(int fm); -STATIC_INLINE void do_delays_3_aga_hr(int nbits, int fm) +static void setmaxhpos(void) { -#if 0 - if (0 && (toscr_special_skip_ptr == toscr_spc_ocs_hires_to_lores || toscr_special_skip_ptr == toscr_spc_ocs_lores_to_hires)) { - int difsize = 0; - if (toscr_special_res_change_count > 0) { - int delaypos = delay_cycles; - while (nbits > 0) { - if (toscr_special_res_change_count2 > 0) { - toscr_special_res_change_count2--; - } - uae_u16 cmd = 0; - if (toscr_special_skip_ptr == toscr_spc_ocs_hires_to_lores) { - if (toscr_special_res_change_count2 > 0) { - cmd = TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES | TOSCR_SPC_LORES_END; - } else { - cmd = TOSCR_SPC_LORES_START | TOSCR_SPC_LORES | TOSCR_SPC_LORES_END; - } - } else if (toscr_special_skip_ptr == toscr_spc_ocs_lores_to_hires) { - if (toscr_special_res_change_count2 > 0) { - cmd = TOSCR_SPC_LORES_START | TOSCR_SPC_LORES | TOSCR_SPC_HIRES_END; - } else { - cmd = TOSCR_SPC_HIRES_START | TOSCR_SPC_LORES | TOSCR_SPC_HIRES_END; - } - } - if (process_special_pixel(delaypos, fm, cmd)) { - toscr_special_res_change_count_done = toscr_special_res_change_count; - } - delaypos += 1 << toscr_res_pixels_shift_hr; - nbits--; - difsize++; - toscr_special_res_change_count--; - if (toscr_special_res_change_count == 0) { - uae_u32 ptrs[MAX_PLANES]; - if (toscr_special_skip_ptr == toscr_spc_ocs_hires_to_lores) { - int c = 8; - pull_toscr_output_bits(c, toscr_nr_planes_shifter, ptrs); - for(int i = 0; i < toscr_nr_planes_shifter; i++) { - uae_u32 v = ptrs[i]; - for (int j = 0; j < c; j += 2) { - int m1 = 1 << (j + 1); - int m2 = 1 << (j + 0); - if (v & m1) { - v |= m2; - } else { - v &= ~m2; - } - } - ptrs[i] = v; - } - push_toscr_output_bits(c, toscr_nr_planes_shifter, ptrs); - } else if (toscr_special_skip_ptr == toscr_spc_ocs_lores_to_hires) { - int c = 8; - pull_toscr_output_bits(c, toscr_nr_planes_shifter, ptrs); - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - uae_u32 v = ptrs[i]; - for (int j = 0; j < c; j += 2) { - int m1 = 1 << (j + 0); - v &= ~m1; - } - ptrs[i] = v; - //ptrs[i] = 0x5555; - } - push_toscr_output_bits(c, toscr_nr_planes_shifter, ptrs); - } - toscr_special_skip_ptr = NULL; - break; - } - } - } - if (nbits > 0) { - delay_cycles += difsize * (1 << toscr_res_pixels_shift_hr); - do_delays_3_aga_hr2(nbits, fm); - delay_cycles -= difsize * (1 << toscr_res_pixels_shift_hr); - } - } -#endif - if (toscr_special_skip_ptr) { - int difsize = 0; - int delaypos = delay_cycles; - while (nbits > 0) { - uae_u16 cmd = *toscr_special_skip_ptr; - if (cmd & TOSCR_SPC_SKIP) { - delay_cycles += difsize * (1 << toscr_res_pixels_shift_hr); - do_delays_3_aga_hr2(1, fm); - delay_cycles -= difsize * (1 << toscr_res_pixels_shift_hr); - delaypos += 1 << toscr_res_pixels_shift_hr; - nbits--; - difsize++; - toscr_special_skip_ptr++; - } else { - uae_u64 toda[MAX_PLANES]; - if (cmd & TOSCR_SPC_DUAL) { - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - toda[i] = todisplay2_aga[i]; - } - } - if (cmd & TOSCR_SPC_CLEAR) { - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - todisplay2_aga[i] &= ~0x8000; - } - } - if (cmd & TOSCR_SPC_CLEAR2) { - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - todisplay2_aga[i] &= 0xff00; - } - } - if ((cmd & TOSCR_SPC_MARK) && (vpos & 1)) { - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - todisplay2_aga[i] ^= 0x8000; - } - } - process_special_pixel(delaypos, fm, cmd); -#if 0 - int delay1 = (bplcon1 & 0x0f) | ((bplcon1 & 0x0c00) >> 6); - int delay2 = ((bplcon1 >> 4) & 0x0f) | (((bplcon1 >> 4) & 0x0c00) >> 6); - int delaymask, shiftmask; - if (cmd & TOSCR_SPC_LORES) { - delaymask = fetchmode_mask >> 0; - shiftmask = 63; - } else { - delaymask = fetchmode_mask >> 1; - shiftmask = 31; - } - if (cmd & TOSCR_SPC_HIRES_START) { - toscr_res_pixels_mask_hr = 1 >> toscr_res_pixels_shift_hr; - } - if (cmd & TOSCR_SPC_LORES_START) { - toscr_res_pixels_mask_hr = 3 >> toscr_res_pixels_shift_hr; - } - int shifter[2]; - shifter[0] = (delay1 & delaymask) << LORES_TO_SHRES_SHIFT; - shifter[1] = (delay2 & delaymask) << LORES_TO_SHRES_SHIFT; - for (int oddeven = 0; oddeven < 2; oddeven++) { - int delay = shifter[oddeven]; - int diff = ((delay - delaypos) & shiftmask) >> toscr_res_pixels_shift_hr; - if (diff == 0) { - todisplay_copy_hr_oddeven(oddeven, fm); - } - do_tosrc_hr(oddeven, 2, 1, fm); - } - if (cmd & TOSCR_SPC_LORES_END) { - toscr_res_pixels_mask_hr = 3 >> toscr_res_pixels_shift_hr; - } - if (cmd & TOSCR_SPC_HIRES_END) { - toscr_res_pixels_mask_hr = 1 >> toscr_res_pixels_shift_hr; - } -#endif - if (cmd & TOSCR_SPC_DUAL) { - for (int i = 0; i < toscr_nr_planes_shifter; i++) { - todisplay2_aga[i] = toda[i]; - } - } + maxhpos = maxhpos_short + lol; + maxhposm0 = maxhpos; + maxhposm1 = maxhpos - 1; + maxhposeven = (maxhposm1 & 1) == 0; +} - delaypos += 1 << toscr_res_pixels_shift_hr; - nbits--; - difsize++; +#define CPU_ACCURATE (currprefs.cpu_model < 68020 || (currprefs.cpu_model == 68020 && currprefs.cpu_memory_cycle_exact)) - int sh = 1 << toscr_res_pixels_shift_hr; - toscr_special_skip_ptr += sh; - if (*toscr_special_skip_ptr == 0) { - toscr_special_skip_ptr = NULL; - break; - } - } - } - if (nbits > 0) { - delay_cycles += difsize * (1 << toscr_res_pixels_shift_hr); - do_delays_3_aga_hr2(nbits, fm); - delay_cycles -= difsize * (1 << toscr_res_pixels_shift_hr); - } - } else { - do_delays_3_aga_hr2(nbits, fm); - } +static void check_line_enabled(void) +{ + line_disabled &= ~3; + //line_disabled |= line_hidden() ? 1 : 0; + line_disabled |= custom_disabled ? 2 : 0; } - -STATIC_INLINE void do_delays_fast_3_aga_hr(int nbits, int fm) +static void incpos(uae_u16 *hpp, uae_u16 *vpp) { - int delaypos = delay_cycles; - int delay = toscr_delay_shifter[0]; - int diff = ((delay - delaypos) & shifter_mask) >> toscr_res_pixels_shift_hr; - int nbits2 = nbits; - if (nbits2 > diff) { - do_tosrc_hr(0, 1, diff, fm); - nbits2 -= diff; - if (todisplay_fetched) { - memcpy(todisplay2_aga, todisplay_aga, toscr_nr_planes_shifter * sizeof(uae_u64)); - todisplay_fetched = 0; - out_subpix[0] = 0; - out_subpix[1] = 0; + uae_u16 hp = *hpp; + uae_u16 vp = *vpp; + + if (hp == 1) { + vp++; + if (vp == maxvpos + lof_store) { + vp = 0; } } - if (nbits2) { - do_tosrc_hr(0, 1, nbits2, fm); + hp++; + if (hp == maxhpos) { + hp = 0; + } + if (agnus_pos_change >= 1) { + if (agnus_vpos_next >= 0) { + vp = agnus_vpos_next; + } + if (agnus_hpos_next >= 0) { + hp = agnus_hpos_next; + } } + *hpp = hp; + *vpp = vp; } -static void do_delays_2_0(int nbits) { do_delays_3_ecs(nbits); } -#ifdef AGA -static void do_delays_2_1(int nbits) { do_delays_3_aga(nbits, 1); } -static void do_delays_2_2(int nbits) { do_delays_3_aga(nbits, 2); } - -static void do_delays_2_0_hr(int nbits) { do_delays_3_aga_hr(nbits, 0); } -static void do_delays_2_1_hr(int nbits) { do_delays_3_aga_hr(nbits, 1); } -static void do_delays_2_2_hr(int nbits) { do_delays_3_aga_hr(nbits, 2); } -static void do_delays_fast_2_0_hr(int nbits) { do_delays_fast_3_aga_hr(nbits, 0); } -static void do_delays_fast_2_1_hr(int nbits) { do_delays_fast_3_aga_hr(nbits, 1); } -static void do_delays_fast_2_2_hr(int nbits) { do_delays_fast_3_aga_hr(nbits, 2); } -#endif +static uae_u16 VPOSR(void) +{ + uae_u16 csbit = 0; + uae_u16 vp = GETVPOS(); + uae_u16 hp = GETHPOS(); + int lofr = lof_store; + int lolr = lol; -static void do_delays_fast_2_0(int nbits) { do_delays_fast_3_ecs(nbits); } -#ifdef AGA -static void do_delays_fast_2_1(int nbits) { do_delays_fast_3_aga(nbits, 1); } -static void do_delays_fast_2_2(int nbits) { do_delays_fast_3_aga(nbits, 2); } -#endif + incpos(&hp, &vp); + vp = (vp >> 8) & 7; -// slower version, odd and even delays are different or crosses maxhpos -STATIC_INLINE void do_delays(int nbits, int fm) -{ - switch (fm) { - case 0: - do_delays_2_0(nbits); - break; + if (currprefs.cs_agnusrev >= 0) { + csbit |= currprefs.cs_agnusrev << 8; + } else { #ifdef AGA - case 1: - do_delays_2_1(nbits); - break; - case 2: - do_delays_2_2(nbits); - break; + csbit |= aga_mode ? 0x2300 : 0; +#endif + csbit |= ecs_agnus ? 0x2000 : 0; +#if 0 /* apparently "8372 (Fat-hr) (agnushr),rev 5" does not exist */ + if (currprefs.chipmem_size > 1024 * 1024 && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) + csbit |= 0x2100; #endif + if (currprefs.ntscmode) { + csbit |= 0x1000; + } } -} -// common optimized case: odd delay == even delay -STATIC_INLINE void do_delays_fast(int nbits, int fm) -{ - switch (fm) { - case 0: - do_delays_fast_2_0(nbits); - break; -#ifdef AGA - case 1: - do_delays_fast_2_1(nbits); - break; - case 2: - do_delays_fast_2_2(nbits); - break; -#endif + if (!ecs_agnus) { + vp &= 1; + } else { + vp |= lolr ? 0x80 : 0; } + vp |= (lofr ? 0x8000 : 0) | csbit; + hsyncdelay(); + +#if 0 + if (1 || (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000)) + write_log (_T("VPOSR %04x at %08x\n"), vp, M68K_GETPC); +#endif + return vp; } -#ifdef AGA -STATIC_INLINE void do_delays_hr(int nbits, int fm) +static void VPOSW(uae_u16 v) { - switch (fm) { - case 0: - do_delays_2_0_hr(nbits); - break; - case 1: - do_delays_2_1_hr(nbits); - break; - case 2: - do_delays_2_2_hr(nbits); - break; - } -} + int oldvpos = vpos; + int newvpos = vpos; -STATIC_INLINE void do_delays_fast_hr(int nbits, int fm) -{ - switch (fm) { - case 0: - do_delays_fast_2_0_hr(nbits); - break; - case 1: - do_delays_fast_2_1_hr(nbits); - break; - case 2: - do_delays_fast_2_2_hr(nbits); - break; - } -} +#if VPOSW_DEBUG + if (M68K_GETPC < 0xf00000 || 1) + write_log (_T("VPOSW %04X PC=%08x\n"), v, M68K_GETPC); #endif - -STATIC_INLINE void do_delays_null(int nbits) -{ - for (int i = 0; i < MAX_PLANES; i++) { - outword[i] <<= nbits; - outword64[i] <<= nbits; - } -} - -static uae_u32 todisplay2_saved[MAX_PLANES], todisplay_saved[MAX_PLANES]; -static uae_u64 todisplay2_aga_saved[MAX_PLANES], todisplay_aga_saved[MAX_PLANES]; -static uae_u16 todisplay_fetched_saved; - -STATIC_INLINE void toscr_special(int nbits, int fm) -{ - int total = nbits << toscr_res_pixels_shift; - bool slow = false; - if (delay_cycles2 <= delay_lastcycle[lol] && delay_cycles2 + total > delay_lastcycle[lol]) { - slow = true; - } - if (delay_cycles2 <= delay_hsynccycle && delay_cycles2 + total > delay_hsynccycle) { - slow = true; - } - if (slow) { - for (int i = 0; i < nbits; i++) { - if (toscr_hend == 0 && delay_cycles2 == delay_lastcycle[lol]) { - toscr_hend = 1; - if (!hstrobe_conflict) { - delay_cycles = 2 << LORES_TO_SHRES_SHIFT; - } - } - if (delay_cycles2 == delay_hsynccycle) { - toscr_hend = 2; - for (int i = 0; i < MAX_PLANES; i++) { - todisplay_saved[i] = todisplay[i]; - todisplay_aga_saved[i] = todisplay_aga[i]; - todisplay2_saved[i] = todisplay2[i]; - todisplay2_aga_saved[i] = todisplay2_aga[i]; - } - todisplay_fetched_saved = todisplay_fetched; - } - if (toscr_hend <= 1) { - if (!toscr_scanline_complex_bplcon1) { - do_delays_fast(1, fm); - } else { - do_delays(1, fm); - } - } else { - do_delays_null(1); - } - delay_cycles += toscr_res_pixels; - delay_cycles2 += toscr_res_pixels; - } - } else { - if (toscr_hend <= 1) { - if (!toscr_scanline_complex_bplcon1) { - do_delays_fast(nbits, fm); - } else { - do_delays(nbits, fm); - } - } else { - do_delays_null(nbits); - } - delay_cycles += total; - delay_cycles2 += total; - } -} - -STATIC_INLINE void toscr_special_hr(int nbits, int fm) -{ - int total = nbits << toscr_res_pixels_shift_hr; - bool slow = false; - if (delay_cycles2 <= delay_lastcycle[lol] && delay_cycles2 + total > delay_lastcycle[lol]) { - slow = true; +#if 1 + if (lof_store != ((v & 0x8000) ? 1 : 0)) { + lof_store = (v & 0x8000) ? 1 : 0; + lof_changing = lof_store ? 1 : -1; } - if (delay_cycles2 <= delay_hsynccycle && delay_cycles2 + total > delay_hsynccycle) { - slow = true; +#endif + // LOL is always reset when VPOSW is written to. + // Implemented in all NTSC Agnus versions and ECS/AGA Agnus in NTSC mode. + if (lol) { + lol = false; + setmaxhpos(); } - if (slow) { - for (int i = 0; i < nbits; i++) { - if (toscr_hend == 0 && delay_cycles2 == delay_lastcycle[lol]) { - toscr_hend = 1; - if (!hstrobe_conflict) { - delay_cycles = 2 << LORES_TO_SHRES_SHIFT; - } - } - if (delay_cycles2 == delay_hsynccycle) { - toscr_hend = 2; - for (int i = 0; i < MAX_PLANES; i++) { - todisplay_saved[i] = todisplay[i]; - todisplay_aga_saved[i] = todisplay_aga[i]; - todisplay2_saved[i] = todisplay2[i]; - todisplay2_aga_saved[i] = todisplay2_aga[i]; - } - todisplay_fetched_saved = todisplay_fetched; - } - if (toscr_hend <= 1) { - if (!toscr_scanline_complex_bplcon1) { - do_delays_fast_hr(1, fm); - } else { - do_delays_hr(1, fm); - } - } else { - do_delays_null(1); - } - delay_cycles += toscr_res_pixels_hr; - delay_cycles2 += toscr_res_pixels_hr; - } - } else { - if (toscr_hend <= 1) { - if (!toscr_scanline_complex_bplcon1) { - do_delays_fast_hr(nbits, fm); - } else { - do_delays_hr(nbits, fm); - } - } else { - do_delays_null(nbits); - } - delay_cycles += total; - delay_cycles2 += total; + newvpos &= 0x00ff; + v &= 7; + if (!ecs_agnus) { + v &= 1; } -} + newvpos |= v << 8; -STATIC_INLINE void toscr_1(int nbits, int fm) -{ - int total = nbits << toscr_res_pixels_shift; - if (toscr_hend || delay_cycles2 + total > delay_lastcycle[lol]) { - toscr_special(nbits, fm); - } else if (!toscr_scanline_complex_bplcon1) { - // Most common case. - do_delays_fast(nbits, fm); - delay_cycles += total; - delay_cycles2 += total; - } else { - // if scanline has at least one complex case (odd != even) - // all possible remaining odd == even cases in same scanline - // must also use complex case routine. - do_delays(nbits, fm); - delay_cycles += total; - delay_cycles2 += total; - } - - out_nbits += nbits; - if (out_nbits == 32) { - if (out_offs < MAX_WORDS_PER_LINE * 2 / 4) { - uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; - for (int i = 0; i < toscr_nr_planes2; i++) { - uae_u32 *dataptr32 = (uae_u32*)dataptr; - if (*dataptr32 != outword[i]) { - thisline_changed = 1; - *dataptr32 = outword[i]; - } - dataptr += MAX_WORDS_PER_LINE * 2; - } - out_offs++; - } - out_nbits = 0; - } + agnus_vpos_next = newvpos; + agnus_pos_change = 2; } -STATIC_INLINE void toscr_1_hr(int nbits, int fm) +static void VHPOSW(uae_u32 v) { - toscr_special_hr(nbits, fm); - - out_nbits += nbits; - if (out_nbits == 64) { - toscr_1_hr_nbits(); - } -} - -static void toscr_fm0(int); -static void toscr_fm1(int); -static void toscr_fm2(int); -static void toscr_hr_fm0(int); -static void toscr_hr_fm1(int); -static void toscr_hr_fm2(int); + int newvpos = vpos; -STATIC_INLINE void toscr(int nbits, int fm) -{ - switch (fm) { - case 0: toscr_fm0(nbits); break; -#ifdef AGA - case 1: toscr_fm1(nbits); break; - case 2: toscr_fm2(nbits); break; +#if VPOSW_DEBUG + if (M68K_GETPC < 0xf00000 || 1) + write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC); #endif - } -} -STATIC_INLINE void toscr_hr(int nbits, int fm) -{ - switch (fm) { - case 0: toscr_hr_fm0(nbits); break; -#ifdef AGA - case 1: toscr_hr_fm1(nbits); break; - case 2: toscr_hr_fm2(nbits); break; -#endif + bool cpu_accurate = currprefs.m68k_speed >= 0 && !currprefs.cachesize && currprefs.cpu_memory_cycle_exact; + if (cpu_accurate || copper_access) { + int hnew = v & 0xff; + agnus_hpos_next = hnew; } -} - -STATIC_INLINE void toscr_0(int nbits, int fm) -{ - int t; - while(nbits > TOSCR_NBITS) { - toscr(TOSCR_NBITS, fm); - nbits -= TOSCR_NBITS; - } + newvpos &= 0xff00; + newvpos |= v >> 8; - t = 2 * TOSCR_NBITS - out_nbits; - if (t < nbits) { - toscr_1(t, fm); - nbits -= t; - } - toscr_1(nbits, fm); + agnus_vpos_next = newvpos; + agnus_pos_change = 2; } -STATIC_INLINE void toscr_0_hr(int nbits, int fm) +// 80E1 -> 80E2 -> 8000 -> 8001 -> 8102 -> 8103 +static uae_u16 VHPOSR(void) { - nbits <<= toscr_res_mult; - while(nbits > 0) { - int n = 2 * TOSCR_NBITSHR - out_nbits; - if (n > nbits) - n = nbits; - toscr_1_hr(n, fm); - nbits -= n; - } -} - -static void toscr_fm0(int nbits) { toscr_0(nbits, 0); } -static void toscr_fm1(int nbits) { toscr_0(nbits, 1); } -static void toscr_fm2(int nbits) { toscr_0(nbits, 2); } - -static void toscr_hr_fm0(int nbits) { toscr_0_hr(nbits, 0); } -static void toscr_hr_fm1(int nbits) { toscr_0_hr(nbits, 1); } -static void toscr_hr_fm2(int nbits) { toscr_0_hr(nbits, 2); } + static uae_u16 oldhp; + uae_u16 vp = GETVPOS(); + uae_u16 hp = GETHPOS(); -static void flush_plane_data_n(int fm) -{ - // flush pending data - if (out_nbits <= TOSCR_NBITS) { - toscr_1(TOSCR_NBITS, fm); - } - if (out_nbits != 0) { - toscr_1(2 * TOSCR_NBITS - out_nbits, fm); - } - // flush until hsync - int maxcnt = 32; - while ((toscr_hend == 0 || toscr_hend == 1) && maxcnt-- >= 0) { - toscr_1(TOSCR_NBITS, fm); - } -} + incpos(&hp, &vp); + vp <<= 8; -static void flush_plane_data_hr(int fm) -{ - // flush pending data - if (out_nbits <= TOSCR_NBITSHR) { - toscr_1_hr(TOSCR_NBITSHR, fm); - } - if (out_nbits != 0) { - toscr_1_hr(2 * TOSCR_NBITSHR - out_nbits, fm); - } - // flush until hsync - int maxcnt = 32; - while ((toscr_hend == 0 || toscr_hend == 1) && maxcnt-- >= 0) { - toscr_1_hr(TOSCR_NBITSHR, fm); + if (hsyncdelay()) { + // fake continuously changing hpos in fastest possible modes + hp = oldhp % maxhpos; + oldhp++; } -} -static void quick_add_delay_cycles(int total) -{ - while (total > 0) { - int total2 = total; - if (delay_cycles2 <= delay_lastcycle[lol] && delay_cycles2 + total2 > delay_lastcycle[lol]) { - total2 = delay_lastcycle[lol] - delay_cycles2; - } - if (delay_cycles2 <= delay_hsynccycle && delay_cycles2 + total2 > delay_hsynccycle) { - total2 = delay_hsynccycle - delay_cycles2; - } - delay_cycles += total2; - delay_cycles2 += total2; + vp |= hp; #if 0 -0 if (toscr_special_res_change_count > 0) { - int tot = total2; - while (tot > 0) { - if (toscr_special_res_change_count2 > 0) { - toscr_special_res_change_count2--; - } - toscr_special_res_change_count--; - if (toscr_special_res_change_count == 0) { - break; - } - tot--; - } - } + if (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000) + write_log (_T("VPOS %04x %04x at %08x\n"), VPOSR (), vp, M68K_GETPC); #endif - - if (toscr_special_skip_ptr) { - int tot = total2; - while (tot > 0) { - toscr_special_skip_ptr++; - tot--; - if (*toscr_special_skip_ptr == 0) { - toscr_special_skip_ptr = NULL; - break; - } - } - } - - total -= total2; - if (total <= 0) { - break; - } - if (currprefs.chipset_hr) { - toscr_special_hr(1, fetchmode); - } else { - toscr_special(1, fetchmode); - } - } + return vp; } -// flush remaining data but leave data after hsync -static void flush_plane_data(int fm) +static uae_u16 HHPOSR(void) { - if (currprefs.chipset_hr) { - flush_plane_data_hr(fm); + uae_u16 v; + if (islightpentriggered()) { + v = hhpos_lpen; } else { - flush_plane_data_n(fm); + v = hhpos; } + v &= 0xff; + return v; } -static void flush_display(int fm) +static void HHPOS(uae_u16 v) { - if (toscr_nbits && bpl_shifter) { - if (currprefs.chipset_hr) { - toscr_hr(toscr_nbits, fm); - } else { - toscr(toscr_nbits, fm); - } - } else if (toscr_nbits) { - int total; - if (currprefs.chipset_hr) { - total = toscr_nbits << (toscr_res_mult + toscr_res_pixels_shift_hr); - } else { - total = toscr_nbits << toscr_res_pixels_shift; - } - quick_add_delay_cycles(total); - } - toscr_nbits = 0; + hhpos = v & (MAXHPOS_ROWS - 1); } -static void record_color_change(int hpos, int regno, uae_u32 value); - -static void hack_shres_delay(int hpos) +static void SPRHSTRT(uae_u16 v) { -#if 0 - if (currprefs.chipset_hr) - return; - if (!aga_mode && !toscr_delay_sh[0] && !toscr_delay_sh[1]) - return; - int o0 = toscr_delay_sh[0]; - int o1 = toscr_delay_sh[1]; - int shdelay1 = (bplcon1 >> 8) & 3; - int shdelay2 = (bplcon1 >> 12) & 3; - if (shdelay1 != shdelay2) { - shdelay_disabled = true; - } - if (shdelay_disabled) { - toscr_delay_sh[0] = 0; - toscr_delay_sh[1] = 0; - } else { - toscr_delay_sh[0] = (shdelay1 & 3) >> toscr_res; - toscr_delay_sh[1] = (shdelay2 & 3) >> toscr_res; - } - if (hpos >= 0 && (toscr_delay_sh[0] != o0 || toscr_delay_sh[1] != o1)) { - record_color_change(hpos, 0, COLOR_CHANGE_SHRES_DELAY | toscr_delay_sh[0]); - current_colors.extra &= ~(1 << CE_SHRES_DELAY_SHIFT); - current_colors.extra &= ~(1 << (CE_SHRES_DELAY_SHIFT + 1)); - current_colors.extra |= toscr_delay_sh[0] << CE_SHRES_DELAY_SHIFT; - remembered_color_entry = -1; - thisline_changed = 1; + if (ecs_agnus) { + programmed_register_accessed = true; + sprhstrt = v; + sprhstrt_v = v & (MAXVPOS_LINES_ECS - 1); } -#endif } - -static void update_denise_vars(void) +static void SPRHSTOP(uae_u16 v) { - int res = GET_RES_DENISE(bplcon0d); - if (res == toscr_res_old) - return; - flush_display(fetchmode); - toscr_res = res; - toscr_res_old = res; - update_toscr_vars(); - compute_toscr_delay(bplcon1); - compute_shifter_mask(); + if (ecs_agnus) { + programmed_register_accessed = true; + sprhstop = v; + sprhstop_v = v & (MAXVPOS_LINES_ECS - 1); + } } - -static void update_denise(int hpos) +static void BPLHSTRT(uae_u16 v) { - update_denise_vars(); - if (bplcon0d_old != bplcon0d) { - bplcon0d_old = bplcon0d; - record_color_change2(hpos, 0x100 + RECORDED_REGISTER_CHANGE_OFFSET, bplcon0d); - toscr_nr_planes = GET_PLANES(bplcon0d); - hack_shres_delay(hpos); + if (ecs_agnus) { + programmed_register_accessed = true; + bplhstrt = v; + bplhstrt_v = v & (MAXVPOS_LINES_ECS - 1); } } - -STATIC_INLINE void clear_fetchbuffer(uae_u32 *ptr, int nwords) +static void BPLHSTOP(uae_u16 v) { - thisline_changed = 1; - memset(ptr, 0, nwords * 4); + if (ecs_agnus) { + programmed_register_accessed = true; + bplhstop = v; + bplhstop_v = v & (MAXVPOS_LINES_ECS - 1); + } } - -static void update_toscr_planes(int newplanes, int fm) +static void SPRHPTH(uae_u16 v) { - // This must be called just before new bitplane block starts, - // not when depth value changes. Depth can change early and can leave - // 16+ pixel horizontal line of old data visible. - if (out_offs) { - for (int j = toscr_nr_planes2; j < newplanes ; j++) { - clear_fetchbuffer((uae_u32 *)(line_data[next_lineno] + 2 * MAX_WORDS_PER_LINE * j), out_offs); - if (thisline_decision.plfleft >= 0) { - todisplay[j] = 0; -#ifdef AGA - if (fm) { - todisplay_aga[j] = 0; - } -#endif - } - } + if (ecs_agnus) { + programmed_register_accessed = true; + hhbpl &= 0x0000ffff; + hhbpl |= v; } } - -static void hbstrt_bordercheck(int hpos, bool early) +static void SPRHPTL(uae_u16 v) { - if (exthblank) { - sync_color_changes(hpos); - } - if (hb_last_diwlastword < 0) { - return; - } - // if HBSTRT re-enabled border (and HDIW was already open), BPL1DAT access will disable border again. - uae_u16 pos = hpos_to_diwx(hpos); - if (early) { - pos -= 2; + if (ecs_agnus) { + programmed_register_accessed = true; + hhbpl &= 0xffff0000; + hhbpl |= v << 16; } - pos -= 2; // 1 hires pixel early - pos = adjust_hr(pos); - hdiw_restart(hb_last_diwlastword, pos, false); - hb_last_diwlastword = -1; } - -static void beginning_of_plane_block_early(int hpos) +static void BPLHPTH(uae_u16 v) { - plane0p = false; - plane0p_enabled = false; - if (thisline_decision.plfleft >= 0) { - return; - } - bprun_pipeline_flush_delay = maxhpos; - flush_display(fetchmode); - reset_bpl_vars(); - bpl_shifter = 1; - int left = hpos + hpos_hsync_extra; - thisline_decision.plfleft = left * 2; - if (hdiwstate == diw_states::DIW_waiting_stop && thisline_decision.diwfirstword < 0) { - // 1.5 lores pixels - int v = hpos_to_diwx(hpos); - v += 6; - v = adjust_hr(v); - thisline_decision.diwfirstword = coord_diw_shres_to_window_x(v); - + if (ecs_agnus) { + programmed_register_accessed = true; + hhspr &= 0x0000ffff; + hhspr |= v; } - hbstrt_bordercheck(hpos, false); } - -static void start_noborder(int hpos) +static void BPLHPTL(uae_u16 v) { - if (bpl_shifter <= 0) { - bpl_shifter = 1; - reset_bpl_vars(); - } - if (thisline_decision.plfleft < 0) { - thisline_decision.plfleft = hpos * 2; - if (hdiwstate == diw_states::DIW_waiting_stop && thisline_decision.diwfirstword < 0) { - thisline_decision.diwfirstword = min_diwlastword; - } + if (ecs_agnus) { + programmed_register_accessed = true; + hhspr &= 0xffff0000; + hhspr |= v << 16; } } - -/* Called when all planes have been fetched, i.e. when a new block -of data is available to be displayed. The data in fetched[] is -moved into todisplay[]. */ -static void beginning_of_plane_block(int hpos) +static void BPLHMOD(uae_u16 v) { - flush_display(fetchmode); - - if (fetchmode == 0 && (!currprefs.chipset_hr || !ALL_SUBPIXEL)) - for (int i = 0; i < MAX_PLANES; i++) { - todisplay[i] = fetched[i]; - } -#ifdef AGA - else - for (int i = 0; i < MAX_PLANES; i++) { - todisplay_aga[i] = fetched_aga[i]; - } -#endif - todisplay_fetched = 3; - plane0_first_done = true; - if (hpos > last_bpl1dat_hpos) { - last_bpl1dat_hpos = hpos; - } - // HBLANK start to HSYNC start? - if (!exthblank && ecs_denise && hpos >= 12 && hpos < hsyncstartpos_start_cycles) { - last_bpl1dat_hpos_early = true; - } - - // do not mistake end of bitplane as start of low value hblank programmed mode - if (hpos > REFRESH_FIRST_HPOS) { - if (ecs_denise && bpl_shifter <= 0) { - bpl_shifter = 1; - reset_bpl_vars(); - thisline_decision.plfleft = hpos * 2; - if (hdiwstate == diw_states::DIW_waiting_stop && thisline_decision.diwfirstword < 0) { - thisline_decision.diwfirstword = min_diwlastword; - } - } else if (!ecs_denise && hdiwbplstart < 0) { - // if OCS Denise and first BPL1DAT is earlier than OCS_DENISE_HBLANK_DISABLE_HPOS: - // -> bitplane shifter works normally but HDIW won't open. - if (bpl_shifter <= 0) { - bpl_shifter = 1; - reset_bpl_vars(); - thisline_decision.plfleft = hpos * 2; - if (hpos >= OCS_DENISE_HBLANK_DISABLE_HPOS) { - if (hdiwstate == diw_states::DIW_waiting_stop && thisline_decision.diwfirstword < 0) { - thisline_decision.diwfirstword = min_diwlastword; - } - hdiwbplstart = min_diwlastword; - } else { - hdiwbplstart = -1; - } - } - // HDIW only opens when next BPL1DAT position is >= OCS_DENISE_HBLANK_DISABLE_HPOS - if (hdiwbplstart < 0 && hpos >= OCS_DENISE_HBLANK_DISABLE_HPOS) { - int v = hpos_to_diwx(hpos); - v -= 4; // 1 lores pixel - v = coord_diw_shres_to_window_x(v); - hdiwbplstart = v; - } - } - } - - hbstrt_bordercheck(hpos, true); - - update_denise(hpos); - if (toscr_nr_planes_agnus > thisline_decision.nr_planes) { - thisline_decision.nr_planes = toscr_nr_planes_agnus; + if (ecs_agnus) { + programmed_register_accessed = true; + bplhmod = v; } } +/* -#if SPEEDUP + REFPTR bit mapping to hidden refresh DMA pointer register. -#define MAX_FETCH_TEMP 128 -static uae_u32 fetch_tmp[MAX_FETCH_TEMP]; + OCS Agnus (RAS/CAS 9/9, 8-bit ROR refresh): -/* The usual inlining tricks - don't touch unless you know what you are doing. */ -STATIC_INLINE void long_fetch_16(int plane, int nwords, int weird_number_of_bits) -{ - uaecptr bpladdr = bplpt[plane]; - int bploffset = 0; - uae_u16 *real_pt = (uae_u16*)pfield_xlateptr(bpladdr, nwords * 2); - int delay = toscr_delay_adjusted[plane & 1]; - int tmp_nbits = out_nbits; - uae_u32 shiftbuffer; - uae_u32 outval = outword[plane]; - uae_u32 fetchval = fetched[plane]; - uae_u32 *dataptr = (uae_u32*)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs); + B RAS CAS + 0: 000 080 + 1: 101 000 + 2: 002 100 + 3: 004 000 + 4: 008 000 + 5: 010 000 + 6: 020 000 + 7: 040 000 + 8: 080 000 + 9: 000 001 + A: 000 002 + B: 000 004 + C: 000 008 + D: 000 010 + E: 000 020 + F: 000 040 - bplpt[plane] += nwords * 2; - bplptx[plane] += nwords * 2; + ECS Agnus 1M (RAS/CAS 9/9, 9-bit ROR refresh): - if (real_pt == NULL) { - if (nwords > MAX_FETCH_TEMP) { - return; - } - for (int i = 0; i < nwords; i++) { - fetch_tmp[i] = chipmem_wget_indirect(bpladdr); - bpladdr += 2; - } - } + B RAS CAS + 0: 080 000 + 1: 100 001 + 2: 000 102 + 3: 000 004 + 4: 000 008 + 5: 000 010 + 6: 000 020 + 7: 000 040 + 8: 000 080 + 9: 001 000 + A: 002 000 + B: 004 000 + C: 008 000 + D: 010 000 + E: 020 000 + F: 040 000 - shiftbuffer = todisplay2[plane] << delay; + ECS Agnus 2M (RAS/CAS 10/10, 9-bit ROR refresh): - while (nwords > 0) { - int bits_left = 32 - tmp_nbits; - uae_u32 t; + B RAS CAS + 0: 080 000 + 1: 100 001 + 2: 000 102 + 3: 200 004 + 4: 000 208 + 5: 000 010 + 6: 000 020 + 7: 000 040 + 8: 000 080 + 9: 001 000 + A: 002 000 + B: 004 000 + C: 008 000 + D: 010 000 + E: 020 000 + F: 040 000 - shiftbuffer |= fetchval; + AGA (RAS/CAS 10/10, CBR refresh) - t = (shiftbuffer >> delay) & 0xffff; + 0: 040/000 + 1: 080/001 + 2: 100/002 + 3: 200/004 + 4: 001/008 + 5: 000/010 + 6: 000/020 + 7: 000/040 + 8: 000/080 + 9: 000/100 + A: 000/200 + B: 002/000 + C: 004/000 + D: 008/000 + E: 010/000 + F: 020/000 - if (weird_number_of_bits && bits_left < 16) { - outval <<= bits_left; - outval |= t >> (16 - bits_left); - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; +*/ - outval = t; - tmp_nbits = 16 - bits_left; - } else { - outval = (outval << 16) | t; - tmp_nbits += 16; - if (tmp_nbits == 32) { - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; - tmp_nbits = 0; - } - } - shiftbuffer <<= 16; - nwords--; - if (real_pt) { - fetchval = do_get_mem_word(real_pt); - real_pt++; - } else { - fetchval = fetch_tmp[bploffset]; - bploffset++; +static void REFPTR(int hpos, uae_u16 v) +{ + int diff = hpos - REFRESH_FIRST_HPOS; + // write exactly 1 cycle before refresh slot: write ignored. + if (diff == -1 || diff == 1 || diff == 3 || diff == 5) { + return; + } + int slot = diff / 2; + if (slot >= 0) { + if (slot > 4) { + slot = 4; } + //update_refptr(-1, slot, true, true); } - fetched[plane] = fetchval; - todisplay2[plane] = shiftbuffer >> delay; - outword[plane] = outval; -} -#ifdef AGA -STATIC_INLINE void long_fetch_32 (int plane, int nwords, int weird_number_of_bits) -{ - uaecptr bpladdr = bplpt[plane] & ~3; - int bploffset = 0; - uae_u32 *real_pt = (uae_u32*)pfield_xlateptr(bpladdr, nwords * 2); - int delay = toscr_delay_adjusted[plane & 1]; - int tmp_nbits = out_nbits; - uae_u64 shiftbuffer; - uae_u32 outval = outword[plane]; - uae_u32 fetchval = (uae_u32)fetched_aga[plane]; - uae_u32 *dataptr = (uae_u32*)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs); - bool unaligned = (bplpt[plane] & 2) != 0; - - bplpt[plane] += nwords * 2; - bplptx[plane] += nwords * 2; - - if (real_pt == NULL) { - if (nwords > MAX_FETCH_TEMP) { - return; + if (aga_mode) { + refptr = 0; + if (v & (1 << 0)) { + refptr |= 0x020000; } - for (int i = 0; i < nwords; i++) { - fetch_tmp[i] = chipmem_lget_indirect(bpladdr); - bpladdr += 4; + if (v & (1 << 1)) { + refptr |= 0x040000 | 0x000001; } - } - - shiftbuffer = todisplay2_aga[plane] << delay; - - while (nwords > 0) { - - shiftbuffer |= fetchval; - - for (int i = 0; i < 2; i++) { - uae_u32 t; - int bits_left = 32 - tmp_nbits; - - t = (shiftbuffer >> (16 + delay)) & 0xffff; - - if (weird_number_of_bits && bits_left < 16) { - outval <<= bits_left; - outval |= t >> (16 - bits_left); - - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; - - outval = t; - tmp_nbits = 16 - bits_left; - } else { - outval = (outval << 16) | t; - tmp_nbits += 16; - if (tmp_nbits == 32) { - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; - tmp_nbits = 0; - } + if (v & (1 << 2)) { + refptr |= 0x000100 | 0x000002; + } + if (v & (1 << 3)) { + refptr |= 0x080000 | 0x000004; + } + if (v & (1 << 4)) { + refptr |= 0x000200 | 0x000008; + } + if (v & (1 << 5)) { + refptr |= 0x000010; + } + if (v & (1 << 6)) { + refptr |= 0x000020; + } + if (v & (1 << 7)) { + refptr |= 0x000040; + } + if (v & (1 << 8)) { + refptr |= 0x000080; + } + if (v & (1 << 9)) { + refptr |= 0x000400; + } + if (v & (1 << 10)) { + refptr |= 0x000800; + } + if (v & (1 << 11)) { + refptr |= 0x001000; + } + if (v & (1 << 12)) { + refptr |= 0x002000; + } + if (v & (1 << 13)) { + refptr |= 0x004000; + } + if (v & (1 << 14)) { + refptr |= 0x008000; + } + if (v & (1 << 15)) { + refptr |= 0x010000; + } + refptr <<= 1; + } else if (ecs_agnus) { + refptr = v & 0xfffe; + if (v & 1) { + refptr |= 0x10000; + } + if (v & 2) { + refptr |= 0x20000; + } + if (v & 4) { + refptr |= 0x40000; + } + if (v & 8) { + refptr |= 0x80000; + } + if (currprefs.chipmem.size > 0x100000) { + if (v & 16) { + refptr |= 0x100000; } - shiftbuffer <<= 16; } - nwords -= 2; - if (real_pt) { - fetchval = do_get_mem_long(real_pt); - real_pt++; - } else { - fetchval = fetch_tmp[bploffset]; - bploffset++; + } else { + refptr = v & 0xfffe; + if (v & 1) { + refptr |= 0x10000; + } + if (v & 2) { + refptr |= 0x20000; } - if (unaligned) { - fetchval &= 0x0000ffff; - fetchval |= fetchval << 16; - } else if (fetchmode_fmode_bpl & 2) { - fetchval &= 0xffff0000; - fetchval |= fetchval >> 16; + if (v & 4) { + refptr |= 0x40000; } - } - fetched_aga[plane] = fetchval; - todisplay2_aga[plane] = (shiftbuffer >> delay) & 0xffffffff; - outword[plane] = outval; +#if 0 + int ras, cas; + bool x = get_ras_cas(refptr, &ras, &cas); + write_log("%04x %08x %c %03x %03X\n", v, refptr, x ? '+' : ' ', ras, cas); +#endif } -#ifdef HAVE_UAE_U128 -/* uae_u128 is available, custom shift functions not necessary */ -#else - -STATIC_INLINE void shift32plus(uae_u64 *p, int n) +static int test_copper_dangerous(uae_u16 reg, bool testonly) { - uae_u64 t = p[1]; - t <<= n; - t |= p[0] >> (64 - n); - p[1] = t; + int addr = reg & 0x01fe; + if (addr < ((copcon & 2) ? (ecs_agnus ? 0 : 0x40) : 0x80)) { + if (!testonly) { + cop_state.state = COP_stop; + copper_enabled_thisline = 0; + } + return 1; + } + return 0; } -STATIC_INLINE void aga_shift(uae_u64 *p, int n) +// if DMA was changed during same cycle: previous value is used +static bool is_blitter_dma(void) { - if (n == 0) return; - shift32plus(p, n); - p[0] <<= n; + bool dma = dmaen(DMA_BLITTER); + if (get_cycles() <= blitter_dma_change_cycle) { + return dma == false; + } + return dma; } - -STATIC_INLINE void shift32plusn(uae_u64 *p, int n) +static bool is_copper_dma(bool checksame) { - uae_u64 t = p[0]; - t >>= n; - t |= p[1] << (64 - n); - p[0] = t; + bool dma = dmaen(DMA_COPPER); + if (checksame && get_cycles() <= copper_dma_change_cycle) { + return dma == false; + } + return dma; } -STATIC_INLINE void aga_shift_n(uae_u64 *p, int n) +static void immediate_copper(int num) { - if (n == 0) return; - shift32plusn(p, n); - p[1] >>= n; -} + int pos = 0; + int oldpos = 0; -#endif + cop_state.state = COP_stop; + cop_state.ip = num == 1 ? cop1lc : cop2lc; -STATIC_INLINE void long_fetch_64(int plane, int nwords, int weird_number_of_bits) -{ - uaecptr bpladdr = bplpt[plane] & ~7; - int bploffset = 0; - uae_u32 *real_pt = (uae_u32*)pfield_xlateptr(bpladdr, nwords * 2); - int delay = toscr_delay_adjusted[plane & 1]; - int tmp_nbits = out_nbits; -#ifdef HAVE_UAE_U128 - uae_u128 shiftbuffer; -#else - uae_u64 shiftbuffer[2]; -#endif - uae_u32 outval = outword[plane]; - uae_u64 fetchval = fetched_aga[plane]; - uae_u32 *dataptr = (uae_u32*)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs); - int shift = (64 - 16) + delay; - bool unaligned2 = (bplpt[plane] & 2) != 0; - bool unaligned4 = (bplpt[plane] & 4) != 0; - - bplpt[plane] += nwords * 2; - bplptx[plane] += nwords * 2; - - if (real_pt == NULL) { - if (nwords * 2 > MAX_FETCH_TEMP) { - return; + while (pos < (maxvpos << 5)) { + if (oldpos > pos) { + pos = oldpos; } - for (int i = 0; i < nwords * 2; i++) { - fetch_tmp[i] = chipmem_lget_indirect(bpladdr); - bpladdr += 4; + if (!is_copper_dma(false)) { + break; } - } - -#ifdef HAVE_UAE_U128 - shiftbuffer = todisplay2_aga[plane] << delay; -#else - shiftbuffer[1] = 0; - shiftbuffer[0] = todisplay2_aga[plane]; - aga_shift(shiftbuffer, delay); -#endif - - while (nwords > 0) { -#ifdef HAVE_UAE_U128 - shiftbuffer |= fetchval; -#else - shiftbuffer[0] |= fetchval; -#endif - - for (int i = 0; i < 4; i++) { - uae_u32 t; - int bits_left = 32 - tmp_nbits; - -#ifdef HAVE_UAE_U128 - t = (shiftbuffer >> shift) & 0xffff; -#else - if (64 - shift > 0) { - t = (uae_u32)(shiftbuffer[1] << (64 - shift)); - t |= shiftbuffer[0] >> shift; - } else { - t = (uae_u32)(shiftbuffer[1] >> (shift - 64)); + if (cop_state.ip >= currprefs.chipmem.size && + (cop_state.ip < currprefs.z3chipmem.start_address || cop_state.ip >= currprefs.z3chipmem.start_address + currprefs.z3chipmem.size) && + (cop_state.ip < debugmem_bank.start || cop_state.ip >= debugmem_bank.start + debugmem_bank.allocated_size)) + break; + pos++; + oldpos = pos; + cop_state.ir[0] = chipmem_wget_indirect (cop_state.ip); + cop_state.ir[1] = chipmem_wget_indirect (cop_state.ip + 2); + cop_state.ip += 4; + if (!(cop_state.ir[0] & 1)) { // move + cop_state.ir[0] &= 0x1fe; + if (cop_state.ir[0] == 0x88) { + cop_state.ip = cop1lc; + continue; } - t &= 0xffff; -#endif - - if (weird_number_of_bits && bits_left < 16) { - outval <<= bits_left; - outval |= t >> (16 - bits_left); - - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; - - outval = t; - tmp_nbits = 16 - bits_left; - } else { - outval = (outval << 16) | t; - tmp_nbits += 16; - if (tmp_nbits == 32) { - thisline_changed |= *dataptr ^ outval; - *dataptr++ = outval; - tmp_nbits = 0; - } + if (cop_state.ir[0] == 0x8a) { + cop_state.ip = cop2lc; + continue; + } + if (test_copper_dangerous(cop_state.ir[0], false)) { + break; + } + custom_wput_1(cop_state.ir[0], cop_state.ir[1], 0); + } else { // wait or skip + if ((cop_state.ir[0] >> 8) > ((pos >> 5) & 0xff)) + pos = (((pos >> 5) & 0x100) | ((cop_state.ir[0] >> 8)) << 5) | ((cop_state.ir[0] & 0xff) >> 3); + if (cop_state.ir[0] >= 0xffdf && cop_state.ir[1] == 0xfffe) { + break; } -#ifdef HAVE_UAE_U128 - shiftbuffer <<= 16; -#else - aga_shift(shiftbuffer, 16); -#endif } + } + cop_state.state = COP_stop; +} - nwords -= 4; +STATIC_INLINE void COP1LCH(uae_u16 v) +{ + cop1lc = (cop1lc & 0xffff) | ((uae_u32)v << 16); - int offset1 = 0; - int offset2 = 1; - if (unaligned4) { - offset1 = 1; + if (agnus_hpos == 2 && vpos == 0 && safecpu() && !copper_access && is_copper_dma(false)) { + if (cop_state.state == COP_strobe_vbl_delay) { + cop_state.strobeip = cop1lc | ((regs.chipset_latch_rw & 0xffff) << 16); } - uae_u32 v1, v2; - if (real_pt) { - v1 = do_get_mem_long(real_pt + offset1); - v2 = do_get_mem_long(real_pt + offset2); - real_pt += 2; - } else { - v1 = fetch_tmp[bploffset + offset1]; - v2 = fetch_tmp[bploffset + offset2]; - bploffset += 2; - } - if (unaligned2) { - v1 &= 0x0000ffff; - v1 |= v1 << 16; - v2 &= 0x0000ffff; - v2 |= v2 << 16; - fetchval = (((uae_u64)v1) << 32) | v2; - } else { - fetchval = ((uae_u64)v1) << 32; - fetchval |= v2; + } +} +STATIC_INLINE void COP1LCL(uae_u16 v) +{ + cop1lc = (cop1lc & ~0xffff) | (v & 0xfffe); + + // really strange chipset bug: if COP1LCL is written exactly at cycle 2, vpos 0, + // vblank triggered COP1JMP loads to internal COPPTR COP1LC OR last data in chip bus! + if (agnus_hpos == 2 && vpos == 0 && safecpu() && !copper_access && is_copper_dma(true)) { + if (cop_state.state == COP_strobe_vbl_delay) { + cop_state.strobeip = cop1lc | (regs.chipset_latch_rw & 0xfffe); } } - fetched_aga[plane] = fetchval; -#ifdef HAVE_UAE_U128 - todisplay2_aga[plane] = shiftbuffer >> delay; -#else - aga_shift_n(shiftbuffer, delay); - todisplay2_aga[plane] = shiftbuffer[0]; -#endif - outword[plane] = outval; } -#endif +STATIC_INLINE void COP2LCH(uae_u16 v) +{ + cop2lc = (cop2lc & 0xffff) | ((uae_u32)v << 16); +} +STATIC_INLINE void COP2LCL(uae_u16 v) +{ + cop2lc = (cop2lc & ~0xffff) | (v & 0xfffe); +} -static void long_fetch_16_0 (int hpos, int nwords) { long_fetch_16 (hpos, nwords, 0); } -static void long_fetch_16_1 (int hpos, int nwords) { long_fetch_16 (hpos, nwords, 1); } -#ifdef AGA -static void long_fetch_32_0 (int hpos, int nwords) { long_fetch_32 (hpos, nwords, 0); } -static void long_fetch_32_1 (int hpos, int nwords) { long_fetch_32 (hpos, nwords, 1); } -static void long_fetch_64_0 (int hpos, int nwords) { long_fetch_64 (hpos, nwords, 0); } -static void long_fetch_64_1 (int hpos, int nwords) { long_fetch_64 (hpos, nwords, 1); } -#endif +static void compute_spcflag_copper(void); -static void do_long_fetch(int hpos, int nwords, int fm) +static uaecptr getstrobecopip(void) { + if (cop_state.strobe == 3) { + return cop1lc | cop2lc; + } else if (cop_state.strobe == 2) { + return cop2lc; + } else { + return cop1lc; + } - beginning_of_plane_block(hpos); +} +static void setstrobecopip(void) +{ + cop_state.ip = getstrobecopip(); + cop_state.strobe = 0; +} + +static struct rgabuf *generate_copper_cycle_if_free(uae_u16 v) +{ + if (is_copper_dma(true) && check_rga_free_slot_in()) { + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_COPPER, 0x8c, &cop_state.ip); + rga->copdat = v; + return rga; + } + return NULL; +} - // adjust to current resolution - int rnwords = nwords >> (3 - toscr_res); +// normal COPJMP write: takes 2 more cycles +static void COPJMP(int num, int vblank) +{ + cop_state.ignore_next = 0; + cop_state.strobe_next = COP_stop; - switch (fm) { - case 0: - if (out_nbits & 15) { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_16_1(i, rnwords); - } - } else { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_16_0(i, rnwords); + if (!cop_state.strobe) { + cop_state.state_prev = cop_state.state; + } + cop_state.strobetype = 0; + if ((cop_state.state == COP_wait1 || cop_state.state == COP_waitforever || + (cop_state.state == COP_read2 && (cop_state.ir[0] & 1)) || + cop_state.state == COP_wait_in2 || cop_state.state == COP_skip_in2) && + !vblank && is_copper_dma(false)) { + // no copper request for next copper cycle + if (blt_info.blit_main) { + static int warned = 100; + if (warned > 0) { + write_log(_T("Potential buggy copper cycle conflict with blitter PC=%08x, COP=%08x\n"), M68K_GETPC, cop_state.ip); + warned--; + //activate_debugger(); } } - break; -#ifdef AGA - case 1: - if (out_nbits & 15) { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_32_1(i, rnwords); - } + int hp = current_hpos(); + if ((hp & 1) && safecpu()) { + // CPU unaligned COPJMP while waiting + cop_state.strobe_next = COP_strobe_delay_start_odd; + cop_state.strobetype = -1; } else { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_32_0(i, rnwords); - } + cop_state.state = COP_strobe_delay_start; } - break; - case 2: - if (out_nbits & 15) { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_64_1(i, rnwords); + } else { + // copper request done for next cycle + if (vblank) { + cop_state.state = COP_strobe_vbl_delay; + cop_state.strobeip = cop1lc; + cop_state.strobe = 0; + struct rgabuf *r = read_rga_in(); + r->type |= CYCLE_COPPER; + r->copdat = 0; + if (!r->alloc) { + r->alloc = -1; + } +#if 1 + switch (cop_state.state_prev) + { + case copper_states::COP_read1: + // Wake up is delayed by 1 copper cycle if copper is currently loading words + cop_state.state = COP_strobe_vbl_extra_delay1; + break; + case copper_states::COP_read2: + // Wake up is delayed by 1 copper cycle if copper is currently loading words + cop_state.state = COP_strobe_vbl_extra_delay2; + break; } +#endif } else { - for (int i = 0; i < toscr_nr_planes; i++) { - long_fetch_64_0(i, rnwords); + if (copper_access) { + cop_state.state = COP_strobe_delay1; + } else { + cop_state.strobe_next = COP_strobe_delay1; + } + cop_state.strobetype = 1; + if (cop_state.state == COP_read2 && !(cop_state.ir[0] & 1)) { + cop_state.strobetype = 2; } } - break; -#endif } + cop_state.vblankip = cop1lc; + cop_state.strobe_cycles = get_cycles() + CYCLE_UNIT; - plane0 = toscr_nr_planes > 0; - - int cnt = nwords; - while (exthblank) { - cnt -= fetchstart; - hpos += fetchstart; - sync_color_changes(hpos); - if (hb_last_diwlastword >= 0) { - hbstrt_bordercheck(hpos, false); - } - if (cnt <= 0) { - break; - } + if (!vblank) { + cop_state.strobe |= num; } - out_nbits += rnwords * 16; - out_offs += out_nbits >> 5; - out_nbits &= 31; - quick_add_delay_cycles((rnwords * 16) << toscr_res_pixels_shift); - -} - -#endif - -/* make sure fetch that goes beyond maxhpos is finished */ -static void finish_final_fetch(int hpos) -{ - clear_bitplane_pipeline(1); - - if (thisline_decision.plfleft < 0) { - // registers that affect programmed vblank must be checked even if line is blank - if (line_decisions[next_lineno].bplcon3 != thisline_decision.bplcon3 - || (line_decisions[next_lineno].bplcon0 & 1) != (thisline_decision.bplcon0 & 1) - || line_decisions[next_lineno].vb != thisline_decision.vb - ) - thisline_changed = 1; + if (custom_disabled) { + copper_enabled_thisline = 0; + immediate_copper(num); return; } - flush_display(fetchmode); - - // This is really the end of scanline, we can finally flush all remaining data. - //thisline_decision.plfright += flush_plane_data(fetchmode, hpos); - flush_plane_data(fetchmode); - - // This can overflow if display setup is really bad. - if (out_offs > MAX_PIXELS_PER_LINE / 32) { - out_offs = MAX_PIXELS_PER_LINE / 32; - } - thisline_decision.plflinelen = out_offs; - - /* The latter condition might be able to happen in interlaced frames. */ - if (vposh >= minfirstline && (thisframe_first_drawn_line < 0 || vposh < thisframe_first_drawn_line)) { - thisframe_first_drawn_line = vposh; - } - thisframe_last_drawn_line = vposh; - -#ifdef SMART_UPDATE - if (line_decisions[next_lineno].plflinelen != thisline_decision.plflinelen - || line_decisions[next_lineno].plfleft != thisline_decision.plfleft - || line_decisions[next_lineno].bplcon0 != thisline_decision.bplcon0 - || line_decisions[next_lineno].bplcon2 != thisline_decision.bplcon2 -#ifdef ECS_DENISE - || line_decisions[next_lineno].bplcon3 != thisline_decision.bplcon3 -#endif -#ifdef AGA - || line_decisions[next_lineno].bplcon4bm != thisline_decision.bplcon4bm - || line_decisions[next_lineno].fmode != thisline_decision.fmode - || line_decisions[next_lineno].vb != thisline_decision.vb -#endif - ) -#endif /* SMART_UPDATE */ - thisline_changed = 1; + compute_spcflag_copper(); } -STATIC_INLINE int bpl_select_plane(int hpos, int plane, bool modulo) +STATIC_INLINE void COPCON(uae_u16 a) { - if (plane >= 1 && plane <= bplcon0_planes_limit) { - int offset = get_rga_pipeline(hpos, RGA_PIPELINE_OFFSET_BPL_WRITE); -#if CYCLE_CONFLICT_LOGGING - if (cycle_line_pipe[offset]) { - write_log(_T("bitplane slot already allocated by %04x!\n"), cycle_line_pipe[offset]); - } -#endif - cycle_line_pipe[offset] = plane | (modulo ? CYCLE_PIPE_MODULO : 0) | CYCLE_PIPE_BITPLANE; - return true; - } - return false; + copcon = a; } -static void do_copper_fetch(int hpos, uae_u16 id); -static void do_sprite_fetch(int hpos, uae_u16 dat); -static void set_maxhpos(int maxhp) +static void check_copper_stop(void) { - maxhposm0 = maxhp; - maxhposm1 = maxhp - 1; - maxhposeven = (maxhp & 1) == 0; + if (copper_enabled_thisline < 0 && !is_copper_dma(false)) { + copper_enabled_thisline = 0; + } } -static void scandoubler_bpl_dma_start(void) +static void copper_stop(void) { - if (!scandoubled_line && doflickerfix_active()) { - int lof = 1 - lof_display; - for (int i = 0; i < MAX_PLANES; i++) { - prevbpl[lof][vpos][i] = bplptx[i]; - if (!lof && (bplcon0 & 4)) { - bplpt[i] = prevbpl[1 - lof][vpos][i]; - } - if (!(bplcon0 & 4) || interlace_seen < 0) { - prevbpl[1 - lof][vpos][i] = prevbpl[lof][vpos][i] = 0; - } - } - } + copper_enabled_thisline = 0; } -static void bpl_dma_normal_stop(int hpos) +static void bitplane_dma_change(uae_u32 v) { - ddf_stopping = 0; - bprun = 0; - bprun_end = hpos; - plfstrt_sprite = 0x100; - bprun_pipeline_flush_delay = 8; - if (!ecs_agnus) { - ddf_limit = true; - } - end_estimate_last_fetch_cycle(hpos); + dmacon_bpl = (v & DMA_BITPLANE) && (v & DMA_MASTER); } -STATIC_INLINE bool islastbplseq(void) +static void compute_spcflag_copper_delayed(uae_u32 v) { - bool last = (bprun_cycle & fetchunit_mask) == fetchunit_mask; - // AGA stops all fetches after 8 cycles - if (aga_mode && ddf_stopping == 2) { - last = (bprun_cycle & 7) == 7; - } - return last; + compute_spcflag_copper(); } -STATIC_INLINE void one_fetch_cycle_0(int hpos, int fm) +static void DMACON(int hpos, uae_u16 v) { - bool last = islastbplseq(); + uae_u16 changed; + uae_u16 oldcon = dmacon; - if (bprun > 0) { - int cycle_pos = bprun_cycle & fetchstart_mask; - // 226 -> 0 (even to even cycle) - bool skip = hpos == maxhposm1 && !maxhposeven; - if (dmacon_bpl && !skip) { - bool domod = false; - if (ddf_stopping == 2) { - int cycle = bprun_cycle & 7; - if (fm_maxplane == 8 || (fm_maxplane == 4 && cycle >= 4) || (fm_maxplane == 2 && cycle >= 6)) { - domod = true; - } - } - int plane = bpl_sequence[cycle_pos]; - bpl_select_plane(hpos, plane, domod); - } - if (skip) { - last = false; - } else { - bprun_cycle++; - } - } else { - bpl_select_plane(hpos, 0, false); + setclr(&dmacon, v); + dmacon &= 0x07FF; + + changed = dmacon ^ oldcon; + +#if 0 + if (v == 0x9696 && vpos == 0xf1 && agnus_hpos == 0x60) + write_log(_T("%04x -> %04x %08x\n"), oldcon, dmacon, m68k_getpc ()); + if (changed) + write_log(_T("%04x -> %04x %08x\n"), oldcon, dmacon, m68k_getpc ()); +#endif + + int oldcop = (oldcon & DMA_COPPER) != 0 && (oldcon & DMA_MASTER) != 0; + int newcop = (dmacon & DMA_COPPER) != 0 && (dmacon & DMA_MASTER) != 0; + if (!oldcop && newcop) { + bootwarpmode(); } - if (last && bprun > 0) { - if (ddf_stopping == 2) { - bpl_dma_normal_stop(hpos); - } - if (ddf_stopping == 1) { - ddf_stopping = 2; + if (newcop && !oldcop) { + if (safecpu()) { + if (copper_access) { + copper_dma_change_cycle = get_cycles(); + } else { + copper_dma_change_cycle = get_cycles() + CYCLE_UNIT; + } } - } - uae_u16 datreg = cycle_line_pipe[hpos]; - plane0 = false; - if (datreg & CYCLE_PIPE_BITPLANE) { - plane0 = fetch((datreg - 1) & 7, fm, hpos, (datreg & CYCLE_PIPE_MODULO) != 0); - } else if (datreg & CYCLE_PIPE_COPPER) { - cycle_line_pipe[hpos] = 0; - do_copper_fetch(hpos, datreg); - } - - if (plane0p_enabled) { - int offset = get_rga_pipeline(hpos, 1); - uae_u16 d = cycle_line_pipe[offset]; - if ((d & CYCLE_PIPE_BITPLANE) && (d & 7) == 1) { - decide_hdiw(hpos); - if (hdiwstate == diw_states::DIW_waiting_stop || plane0p_forced) { - plane0p = true; + copper_enabled_thisline = 1; + } else if (!newcop && oldcop) { + if (safecpu()) { + if (copper_access) { + copper_dma_change_cycle = get_cycles(); + } else { + copper_dma_change_cycle = get_cycles() + CYCLE_UNIT; } } + copper_enabled_thisline = 1; } - fetch_cycle++; - toscr_nbits += toscr_res2p; - - if (bplcon1_written) { - flush_display(fm); - compute_toscr_delay(bplcon1); - bplcon1_written = false; - } - - // BPLCON0 modification immediately after BPL1DAT can affect BPL1DAT finished plane block - if (bplcon0_planes_changed) { - if (bprun) { - if (((hpos - bpl_hstart) & fetchstart_mask) < fetchstart_mask) { - flush_display(fm); - toscr_nr_planes_shifter = toscr_nr_planes_shifter_new; - bplcon0_planes_changed = false; - } + int oldblt = (oldcon & DMA_BLITTER) != 0 && (oldcon & DMA_MASTER) != 0; + int newblt = (dmacon & DMA_BLITTER) != 0 && (dmacon & DMA_MASTER) != 0; + if (oldblt != newblt && (copper_access || safecpu())) { + if (copper_access) { + blitter_dma_change_cycle = get_cycles(); } else { - flush_display(fm); - toscr_nr_planes_shifter = toscr_nr_planes_shifter_new; - bplcon0_planes_changed = false; + // because of CPU vs blitter emulation side-effect + blitter_dma_change_cycle = get_cycles() + CYCLE_UNIT; } } - if (toscr_nbits == TOSCR_NBITS) { - flush_display(fm); + int oldspr = (oldcon & DMA_SPRITE) != 0 && (oldcon & DMA_MASTER) != 0; + int newspr = (dmacon & DMA_SPRITE) != 0 && (dmacon & DMA_MASTER) != 0; + if (!oldspr && newspr) { + if (copper_access || safecpu()) { + sprite_dma_change_cycle_on = get_cycles() + CYCLE_UNIT; + } + } else if (oldspr && !newspr) { + if (copper_access || safecpu()) { + sprite_dma_change_cycle_off = get_cycles(); + } } - if (bprun_pipeline_flush_delay > 0) { - bprun_pipeline_flush_delay--; +#if 0 + int oldb = (oldcon & DMA_BLITTER) && (oldcon & DMA_MASTER); + int newb = (dmacon & DMA_BLITTER) && (dmacon & DMA_MASTER); + int oldbn = (oldcon & DMA_BLITPRI) != 0; + int newbn = (dmacon & DMA_BLITPRI) != 0; + if (oldbn != newbn) + write_log (_T("BLITTER NASTY: %d -> %d %08x\n"), oldbn, newbn, m68k_getpc ()); +#endif + +#if SPRITE_DEBUG > 0 + { + int olds = (oldcon & DMA_SPRITE) && (oldcon & DMA_MASTER); + int news = (dmacon & DMA_SPRITE) && (dmacon & DMA_MASTER); + if (olds != news) + write_log (_T("SPRITE DMA: %d -> %d %08x\n"), olds, news, m68k_getpc ()); } -} +#endif -static void one_fetch_cycle_fm0(int pos) { one_fetch_cycle_0(pos, 0); } -static void one_fetch_cycle_fm1(int pos) { one_fetch_cycle_0(pos, 1); } -static void one_fetch_cycle_fm2(int pos) { one_fetch_cycle_0(pos, 2); } + if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && (blt_info.blit_main || blt_info.blit_queued)) { + set_special(SPCFLAG_BLTNASTY); + } -STATIC_INLINE void one_fetch_cycle(int pos, int fm) -{ - switch (fm) { - case 0: - one_fetch_cycle_fm0(pos); - break; -#ifdef AGA - case 1: - one_fetch_cycle_fm1(pos); - break; - case 2: - one_fetch_cycle_fm2(pos); - break; -#endif + if (dmaen(DMA_BLITTER) && blt_info.blit_pending) { + blitter_check_start(); } -} -static void update_fetch(int until, int fm) -{ - int hpos = last_fetch_hpos; + if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) + unset_special(SPCFLAG_BLTNASTY); - if (hpos >= until) { - return; + if (changed & (DMA_MASTER | DMA_AUD3 | DMA_AUD2 | DMA_AUD1 | DMA_AUD0)) { + audio_state_machine(); } - /* First, a loop that prepares us for the speedup code. We want to enter - the SPEEDUP case with fetch_state == plane0 or it is the very - first fetch cycle (which equals to same state as fetch_was_plane0) - and then unroll whole blocks, so that we end on the same fetch_state again. */ - for(;;) { - if (hpos == until || hpos >= maxhpos) { - if (until >= maxhpos) { - flush_display(fm); - } - last_fetch_hpos = until; - return; - } - if (plane0p) { - beginning_of_plane_block_early(hpos); - } - if (plane0) { - break; +#if 0 + if (changed & (DMA_MASTER | DMA_BITPLANE)) { + // if ECS, DDFSTRT has already passed but DMA was off and DMA gets turned on: BPRUN actvates 1 cycle earlier + bool bpl = (dmacon & DMA_BITPLANE) && (dmacon & DMA_MASTER); + //event2_newevent_xx(-1, CYCLE_UNIT, dmacon, bitplane_dma_change); + dmacon_bpl = bpl; + if (ecs_agnus && bpl && !dmacon_bpl && ddf_enable_on > 0) { + dmacon_bpl = true; + } else { + dmacon_bpl = true; + event2_newevent_xx(-1, CYCLE_UNIT, dmacon, bitplane_dma_change); } - one_fetch_cycle(hpos, fm); - hpos++; + SET_LINE_CYCLEBASED(hpos); } - -#if SPEEDUP - // Unrolled simple version of the for loop below. - if (bprun && !line_cyclebased && dmacon_bpl && !ddf_stopping - && plane0 - && (ecs_denise || hpos >= OCS_DENISE_HBLANK_DISABLE_HPOS) - && !currprefs.chipset_hr -#ifdef DEBUGGER - && !debug_dma #endif - && GET_PLANES_LIMIT(bplcon0) == toscr_nr_planes_agnus) - { - int hard_ddf_stop = harddis_h ? 0x100 : HARD_DDF_STOP; - int adjusted_plfstop = plfstop; - int ddfstop_to_test_ddf = hard_ddf_stop; - if (adjusted_plfstop >= last_fetch_hpos && adjusted_plfstop < ddfstop_to_test_ddf) { - ddfstop_to_test_ddf = adjusted_plfstop; - } - int ddfstop_to_test = ddfstop_to_test_ddf; - int offs = (fetch_cycle - 4) & fetchunit_mask; - int ddf2 = ((ddfstop_to_test - offs + fetchunit - 1) & ~fetchunit_mask) + offs; - int ddf3 = ddf2 + fetchunit; - int stop = until < ddf2 ? until : until < ddf3 ? ddf2 : ddf3; - int count; - - count = stop - hpos; - if (count >= fetchstart) { - count &= ~fetchstart_mask; - - int stoppos = hpos + count; - - if (speedup_first) { - compute_toscr_delay(bplcon1); - speedup_first = false; - } - - do_long_fetch(hpos, count, fm); - - if ((hpos <= adjusted_plfstop && stoppos > adjusted_plfstop) || (hpos <= hard_ddf_stop && stoppos > hard_ddf_stop)) { - ddf_stopping = 1; - } - if (hpos <= ddfstop_to_test && stoppos > ddf2) { - ddf_stopping = 2; - } - if (hpos <= ddf2 && stoppos >= ddf2 + fm_maxplane) { - add_modulos(); - bpl_dma_normal_stop(stoppos); - plane0 = false; - } +} - // Copy pipelined data to new hpos. They are guaranteed to be same because - // above routine always works from BPL1DAT to BPL1DAT. - if (bprun) { - for (int i = RGA_PIPELINE_ADJUST - 1; i >= 0; i--) { - int roffset = get_rga_pipeline(hpos, i); - int woffset = get_rga_pipeline(hpos, count + i); - cycle_line_pipe[woffset] = cycle_line_pipe[roffset]; - cycle_line_pipe[roffset] = 0; - } - } else { - for (int i = 0; i < RGA_PIPELINE_ADJUST; i++) { - int roffset = get_rga_pipeline(hpos, i); - cycle_line_pipe[roffset] = 0; - } - } +static int irq_forced; +static evt_t irq_forced_delay; - hpos += count; - fetch_cycle += count; - bprun_cycle += count; - if (bprun_pipeline_flush_delay > 0) { - bprun_pipeline_flush_delay -= count; - if (bprun_pipeline_flush_delay < 0) { - bprun_pipeline_flush_delay = 0; - } - } - if (plane0) { - last_bpl1dat_hpos = hpos; - } - } - } -#endif - while (hpos < until) { - if (plane0p) { - beginning_of_plane_block_early(hpos); - } - if (plane0) { - beginning_of_plane_block(hpos); - } - one_fetch_cycle(hpos, fm); - hpos++; +void IRQ_forced(int lvl, int delay) +{ + irq_forced = lvl; + irq_forced_delay = 0; + if (delay > 0 && currprefs.cpu_compatible) { + irq_forced_delay = get_cycles() + delay * CYCLE_UNIT; + } else if (delay < 0) { + irq_forced_delay = -1; } - last_fetch_hpos = hpos; + doint(); } -static void update_fetch_0(int hpos) { update_fetch(hpos, 0); } -static void update_fetch_1(int hpos) { update_fetch(hpos, 1); } -static void update_fetch_2(int hpos) { update_fetch(hpos, 2); } - -static void decide_bpl_fetch(int endhpos) +void intlev_ack(int lvl) { - int hpos = last_fetch_hpos; - if (hpos >= endhpos) { + if (!irq_forced) { return; } + if (lvl >= irq_forced && irq_forced_delay < 0) { + irq_forced_delay = 0; + irq_forced = 0; + } +} - if (1 && (nodraw() || !bprun_pipeline_flush_delay)) { - if (hpos < endhpos) { - if (thisline_decision.plfleft >= 0) { - while (hpos < endhpos) { - if (toscr_nbits == TOSCR_NBITS) { - flush_display(fetchmode); - } - toscr_nbits += toscr_res2p; - hpos++; - } - } else { - int diff = endhpos - hpos; - int total = diff << (1 + LORES_TO_SHRES_SHIFT); - quick_add_delay_cycles(total); - } - last_fetch_hpos = endhpos; +int intlev(void) +{ + if (irq_forced) { + int lvl = irq_forced; + if (irq_forced_delay == 0) { + irq_forced = 0; + } else if (irq_forced_delay > 0 && get_cycles() > irq_forced_delay) { + irq_forced = 0; + irq_forced_delay = 0; + } + return lvl; + } + uae_u16 imask = intreq2 & intena2; + if (!(imask && (intena2 & 0x4000))) + return 0; + if (imask & (0x4000 | 0x2000)) // 13 14 + return 6; + if (imask & (0x1000 | 0x0800)) // 11 12 + return 5; + if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10 + return 4; + if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6 + return 3; + if (imask & 0x0008) // 3 + return 2; + if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2 + return 1; + return 0; +} + +void rethink_uae_int(void) +{ + bool irq2 = false; + bool irq6 = false; + + if (uae_int_requested) { + if (uae_int_requested & 0xff00) { + irq6 = true; + } + if (uae_int_requested & 0x00ff) { + irq2 = true; } - return; } - switch (fetchmode) { - case 0: update_fetch_0(endhpos); break; -#ifdef AGA - case 1: update_fetch_1(endhpos); break; - case 2: update_fetch_2(endhpos); break; -#endif - default: uae_abort(_T("fetchmode corrupt")); + { + extern void bsdsock_fake_int_handler(void); + extern int volatile bsd_int_requested; + if (bsd_int_requested) { + bsdsock_fake_int_handler(); + } + } + if (irq6) { + safe_interrupt_set(IRQ_SOURCE_UAE, 0, true); + } + if (irq2) { + safe_interrupt_set(IRQ_SOURCE_UAE, 0, false); } } -static void vdiw_change(uae_u32 v) +static void rethink_intreq(void) { - vdiwstate_bpl = v != 0; +#ifdef SERIAL_PORT + serial_rethink(); +#endif + devices_rethink(); } -/* Take care of the vertical DIW. */ -static void decide_vline(int hpos) +static void intreq_checks(uae_u16 oldreq, uae_u16 newreq) { - bool forceoff = (vb_start_line == 1 && !harddis_v); - bool start = vpos == plffirstline && !forceoff; - // VB start line forces vertical display window off (if HARDDIS=0) - bool end = vpos == plflastline || forceoff; - - if (start && !end) { - if (vdiwstate != diw_states::DIW_waiting_stop) { - event2_newevent_xx(-1, CYCLE_UNIT, 1, vdiw_change); - } - vdiwstate = diw_states::DIW_waiting_stop; - SET_LINE_CYCLEBASED(hpos); - } else if (end) { - if (vdiwstate != diw_states::DIW_waiting_start) { - event2_newevent_xx(-1, CYCLE_UNIT, 0, vdiw_change); - } - vdiwstate = diw_states::DIW_waiting_start; - SET_LINE_CYCLEBASED(hpos); + if ((oldreq & 0x0800) != (newreq & 0x0800)) { + serial_rbf_change((newreq & 0x0800) ? 1 : 0); } } -static void decide_line_decision_fetches(int endhpos) +static void event_doint_delay_do_ext(uae_u32 v) +{ + uae_u16 old = intreq2; + setclr(&intreq, (1 << v) | 0x8000); + setclr(&intreq2, (1 << v) | 0x8000); + + doint(); +} + +static void event_send_interrupt_do_ext(uae_u32 v) { - decide_bpl_fetch(endhpos); - decide_sprites_fetch(endhpos); + event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_ext); } -static void decide_fetch_safe(int endhpos) +// external delayed interrupt +void INTREQ_INT(int num, int delay) { - int hpos = last_fetch_hpos; - if (!blt_info.blitter_dangerous_bpl && !copper_enabled_thisline) { - decide_line_decision_fetches(endhpos); - decide_blitter(endhpos); - } else if (copper_enabled_thisline && blt_info.blitter_dangerous_bpl) { - while (hpos <= endhpos) { - decide_line_decision_fetches(hpos); - update_copper(hpos); - decide_blitter(hpos); - hpos++; + if (m68k_interrupt_delay) { + if (delay < CYCLE_UNIT) { + delay *= CYCLE_UNIT; } + event2_newevent_xx(-1, delay + CYCLE_UNIT, num, event_doint_delay_do_ext); } else { - while (hpos <= endhpos) { - decide_line_decision_fetches(hpos); - decide_blitter(hpos); - hpos++; - } + event_doint_delay_do_ext(num); } } -/* Called when a color is about to be changed (write to a color register), -* but the new color has not been entered into the table yet. */ -static void record_color_change(int hpos, int regno, uae_u32 value) +static void event_doint_delay_do_intreq(uae_u32 v) { - if (regno < RECORDED_REGISTER_CHANGE_OFFSET && nodraw()) - return; - - decide_hdiw(hpos); - - /* vsync period don't appear on-screen. */ - if (line_hidden()) - return; + uae_u16 old = intreq2; + setclr(&intreq2, v); - decide_line(hpos); + doint(); +} - if (thisline_decision.ctable < 0) { - remember_ctable(); +static void doint_delay_intreq(uae_u16 v) +{ + if (m68k_interrupt_delay) { +#if 0 + if (!(v & 0x8000) && (v & (0x400 | 0x200 | 0x100 | 0x80))) { + // same cycle interrupt set? override it + evt_t c = get_cycles() + 1 * CYCLE_UNIT; + for (int i = 0; i < ev2_max; i++) { + struct ev2 *ev = &eventtab2[i]; + if (ev->active && ev->evtime == c && ev->handler == event_doint_delay_do_ext) { + if (ev->data == 7 && (v & 0x0080) || + ev->data == 8 && (v & 0x0100) || + ev->data == 9 && (v & 0x0200) || + ev->data == 10 && (v & 0x0400)) { + ev->active = false; + } + } + } + } +#endif + // INTREQ or INTENA write: IPL line changes 0.5 CCKs later. + // 68000 needs one more CPU clock (0.5 CCK) before it detects it. + event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_intreq); + } else { + event_doint_delay_do_intreq(v); } +} - hpos += vhposr_delay_offset; +static void event_doint_delay_do_intena(uae_u32 v) +{ + setclr(&intena2, v); - record_color_change2(hpos, regno, value); + doint(); } -static void setextblank(void) +static void doint_delay_intena(uae_u16 v) { - bool extblank = (bplcon0 & 1) && (bplcon3 & 0x01); - current_colors.extra &= ~(1 << CE_EXTBLANKSET); - if (extblank) { - current_colors.extra |= 1 << CE_EXTBLANKSET; + if (m68k_interrupt_delay) { + // INTREQ or INTENA write: IPL line changes 0.5 CCKs later. + // 68000 needs one more CPU clock (0.5 CCK) before it detects it. + event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_intena); + } + else { + event_doint_delay_do_intena(v); } } -static bool isbrdblank(int hpos, uae_u16 bplcon0, uae_u16 bplcon3) +static void INTENA(uae_u16 v) { - bool brdblank, brdntrans, extblank; -#ifdef ECS_DENISE - brdblank = (ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x20)) || (currprefs.genlock_effects & (1 << 5)); - brdntrans = (ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x10)) || (currprefs.genlock_effects & (1 << 4)); - // ECSENA=0: hardwired horizontal, strobe vertical - // ECSENA=1: EXTBLKEN=0: hardwired blanking, strobe vertical - // ECSENA=1: EXTBLKEN=1: blanking equals HSYNC if VARCSYEN=1, blanking equals HBSTRT-HBSTOP if VARCSYEN=0, no vertical, AGA: programmed horizontal, strobe vertical - extblank = (bplcon0 & 1) && (bplcon3 & 1); -#else - brdblank = false; - brdntrans = false; - extblank = false; -#endif - if (hpos >= 0 && (ce_is_borderblank(current_colors.extra) != brdblank || ce_is_borderntrans(current_colors.extra) != brdntrans || ce_is_extblankset(current_colors.extra) != extblank)) { - record_color_change(hpos, 0, COLOR_CHANGE_BRDBLANK | (brdblank ? 1 : 0) | (ce_is_bordersprite(current_colors.extra) ? 2 : 0) | (brdntrans ? 4 : 0) | (extblank ? 8 : 0)); - current_colors.extra &= ~(1 << CE_BORDERBLANK); - current_colors.extra &= ~(1 << CE_BORDERNTRANS); - current_colors.extra &= ~(1 << CE_EXTBLANKSET); - current_colors.extra |= brdblank ? (1 << CE_BORDERBLANK) : 0; - current_colors.extra |= brdntrans ? (1 << CE_BORDERNTRANS) : 0; - current_colors.extra |= extblank ? (1 << CE_EXTBLANKSET) : 0; - remembered_color_entry = -1; + uae_u16 old = intena; + setclr(&intena, v); + + if (old != intena) { + doint_delay_intena(v); } - return brdblank; } -static bool brdblankactive(void) +static void INTREQ_nodelay(uae_u16 v) { - return (bplcon0 & 1) && (bplcon3 & 0x20); + uae_u16 old = intreq; + setclr(&intreq, v); + intreq2 = intreq; + intreq_checks(old, intreq); + doint(); } -static bool brdspractive(void) +void INTREQ_f(uae_u16 v) { - return (bplcon3 & 2) && (bplcon0 & 1); + uae_u16 old = intreq; + setclr(&intreq, v); + intreq2 = intreq; + intreq_checks(old, intreq); } -static bool issprbrd(int hpos, uae_u16 bplcon0, uae_u16 bplcon3) +bool INTREQ_0(uae_u16 v) { - bool brdsprt; -#ifdef AGA - brdsprt = aga_mode && brdspractive(); -#else - brdsprt = false; -#endif - if (hpos >= 0 && ce_is_bordersprite(current_colors.extra) != brdsprt) { - record_color_change(hpos, 0, COLOR_CHANGE_BRDBLANK | (ce_is_borderblank(current_colors.extra) ? 1 : 0) | (brdsprt ? 2 : 0) | - (ce_is_borderntrans(current_colors.extra) ? 4 : 0) | (ce_is_extblankset(current_colors.extra) ? 8 : 0)); - current_colors.extra &= ~(1 << CE_BORDERSPRITE); - current_colors.extra |= brdsprt ? (1 << CE_BORDERSPRITE) : 0; - remembered_color_entry = -1; - if (brdsprt && !ce_is_borderblank(current_colors.extra)) { - thisline_decision.bordersprite_seen = true; - } - } - if (!plane0_first_done) { - plane0p_enabled = ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x20); + uae_u16 old = intreq; + setclr(&intreq, v); + + if (old != intreq) { + doint_delay_intreq(v); + intreq_checks(old, intreq); } - return brdsprt && !ce_is_borderblank(current_colors.extra); + return true; } -static bool isham(uae_u16 bplcon0) +void INTREQ(uae_u16 data) { - int p = GET_PLANES(bplcon0); - if (!(bplcon0 & 0x800)) - return 0; - if (aga_mode) { - // AGA only has 6 or 8 plane HAM - if (p == 6 || p == 8) - return 1; - } else { - // OCS/ECS also supports 5 plane HAM - if (GET_RES_DENISE(bplcon0) > 0) - return 0; - if (p >= 5) - return 1; + if (INTREQ_0(data)) { + rethink_intreq(); } - return 0; } -static void record_register_change(int hpos, int regno, uae_u16 value) +static void ADKCON(int hpos, uae_u16 v) { - if (regno == 0x0100 || regno == 0x0101) { // BPLCON0 - if (value & 0x800) { - thisline_decision.ham_seen |= isham(value); - } - thisline_decision.ehb_seen |= isehb(value, bplcon2); - isbrdblank(hpos, value, bplcon3); - issprbrd(hpos, value, bplcon3); - } else if (regno == 0x104) { // BPLCON2 - thisline_decision.ehb_seen |= isehb(bplcon0, value); - } else if (regno == 0x106) { // BPLCON3 - isbrdblank(hpos, bplcon0, value); - issprbrd(hpos, bplcon0, value); + if (currprefs.produce_sound > 0) { + update_audio(); + } + DISK_update(hpos); + DISK_update_adkcon(hpos, v); + setclr(&adkcon, v); + DISK_update_predict(); + audio_update_adkmasks(); +#ifdef SERIAL_PORT + if ((v >> 11) & 1) { + serial_uartbreak((adkcon >> 11) & 1); } - record_color_change(hpos, regno + RECORDED_REGISTER_CHANGE_OFFSET, value); +#endif } -typedef int sprbuf_res_t, cclockres_t, hwres_t, bplres_t; - -/* handle very rarely needed playfield collision (CLXDAT bit 0) */ -/* only known game needing this is Rotor */ -static void do_playfield_collisions(int startpos, int endpos) +static void check_harddis(void) { - int bplres = output_res(bplcon0_res); - hwres_t ddf_left = (thisline_decision.plfleft - DDF_OFFSET) << bplres; - hwres_t hw_diwlast = coord_window_to_diw_x(endpos); - hwres_t hw_diwfirst = coord_window_to_diw_x(startpos); - int i, collided, minpos, maxpos; -#ifdef AGA - int planes = aga_mode ? 8 : 6; -#else - int planes = 6; -#endif + // VARBEAMEN, HARDDIS, SHRES, UHRES + harddis_h = ecs_agnus && ((new_beamcon0 & BEAMCON0_VARBEAMEN) || (new_beamcon0 & BEAMCON0_HARDDIS) || (bplcon0 & 0x0040) || (bplcon0 & 0x0080)); + // VARBEAMEN, VARVBEN, HARDDIS + harddis_v = ecs_agnus && ((new_beamcon0 & BEAMCON0_VARBEAMEN) || (new_beamcon0 & BEAMCON0_VARVBEN) || (new_beamcon0 & BEAMCON0_HARDDIS)); +} - if (clxcon_bpl_enable == 0) { - clxdat |= 1; - return; +static void update_lof_detect(void) +{ + if (lof_detect_vsync != agnus_vb_active) { + lof_detect_vsync = agnus_vb_active; } - // collision bit already set? - if (clxdat & 1) { - return; +} + +static void update_agnus_vb(void) +{ + if (new_beamcon0 & BEAMCON0_VARVBEN) { + agnus_vb_active = agnus_pvb; + agnus_vb_active_end_line = agnus_pvb_end_line; + agnus_vb_active_start_line = agnus_pvb_start_line; + } else { + agnus_vb_active = agnus_vb == 1; + agnus_vb_active_end_line = agnus_vb_end_line; + agnus_vb_active_start_line = agnus_vb_start_line; } +} - collided = 0; - minpos = thisline_decision.plfleft - DDF_OFFSET; - if (minpos < hw_diwfirst) { - minpos = hw_diwfirst; - } - maxpos = thisline_decision.plfright - DDF_OFFSET; - if (maxpos > hw_diwlast) { - maxpos = hw_diwlast; - } - - for (i = minpos; i < maxpos && !collided; i += 32) { - int offs = ((i << bplres) - ddf_left) >> 3; - int j; - uae_u32 total = 0xffffffff; - for (j = 0; j < planes; j++) { - int ena = (clxcon_bpl_enable >> j) & 1; - int match = (clxcon_bpl_match >> j) & 1; - uae_u32 t = 0xffffffff; - if (ena) { - if (j < thisline_decision.nr_planes) { - t = *(uae_u32 *)(line_data[next_lineno] + offs + 2 * j * MAX_WORDS_PER_LINE); - t ^= (match & 1) - 1; - } else { - t = (match & 1) - 1; - } +static void BEAMCON0(uae_u16 v) +{ + if (ecs_agnus) { + bool beamcon0_changed = false; + if (v != new_beamcon0) { + new_beamcon0 = v; + write_log(_T("BEAMCON0 = %04X, PC=%08X\n"), v, M68K_GETPC); + // not LPENDIS, LOLDIS, PAL, BLANKEN, SYNC INVERT + if (v & ~(BEAMCON0_LPENDIS | BEAMCON0_LOLDIS | BEAMCON0_PAL | BEAMCON0_BLANKEN | BEAMCON0_CSYTRUE | BEAMCON0_VSYTRUE | BEAMCON0_HSYTRUE)) { + dumpsync(); } - total &= t; + beamcon0_changed = true; + beamcon0_saved = v; + check_harddis(); + update_agnus_vb(); } - if (total) { - collided = 1; -#if 0 - { - int k; - for (k = 0; k < 1; k++) { - uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + offs + 2 * k * MAX_WORDS_PER_LINE); - *ldata ^= 0x5555555555; - } - } -#endif - + if (beamcon0_changed) { + init_beamcon0(); } } - if (collided) { - clxdat |= 1; - } } -/* Sprite-to-sprite collisions are taken care of in record_sprite. This one does -playfield/sprite collisions. */ -static void do_sprite_collisions(int startpos, int endpos) +static void varsync(int reg, bool resync, int oldval) { - int nr_sprites = curr_drawinfo[next_lineno].nr_sprites; - int first = curr_drawinfo[next_lineno].first_sprite_entry; - uae_u32 collision_mask = clxmask[clxcon >> 12]; - int bplres = output_res(bplcon0_res); - int ddf_left = (thisline_decision.plfleft - DDF_OFFSET) << bplres; - int hw_diwlast = coord_window_to_diw_x(endpos); - int hw_diwfirst = coord_window_to_diw_x(startpos); - - if (clxcon_bpl_enable == 0 && !nr_sprites) { + struct amigadisplay *ad = &adisplays[0]; + if (!ecs_agnus) { return; } - - // all sprite to bitplane collision bits already set? - if ((clxdat & 0x1fe) == 0x1fe) { + programmed_register_accessed = true; +#ifdef PICASSO96 + if (ad->picasso_on && p96refresh_active) { + vtotal = p96refresh_active; return; } +#endif + updateextblk(); - for (int i = 0; i < nr_sprites; i++) { - struct sprite_entry *e = curr_sprite_entries + first + i; - sprbuf_res_t minpos = e->pos; - sprbuf_res_t maxpos = e->max; - int minp1 = minpos >> sprite_buffer_res; - int maxp1 = maxpos >> sprite_buffer_res; - - if (maxp1 > hw_diwlast) { - maxp1 = hw_diwlast; - maxpos = hw_diwlast << sprite_buffer_res; - } - if (maxp1 > thisline_decision.plfright - DDF_OFFSET) { - maxpos = (thisline_decision.plfright - DDF_OFFSET) << sprite_buffer_res; - } - if (minp1 < hw_diwfirst) { - minp1 = hw_diwfirst; - minpos = hw_diwfirst << sprite_buffer_res; - } - if (minp1 < thisline_decision.plfleft - DDF_OFFSET) { - minpos = (thisline_decision.plfleft - DDF_OFFSET) << sprite_buffer_res; - } - - for (sprbuf_res_t j = minpos; j < maxpos; j++) { - int sprpix = spixels[e->first_pixel + j - e->pos] & collision_mask; - int offs, match = 1; - - if (sprpix == 0) { - continue; - } - - offs = ((j << bplres) >> sprite_buffer_res) - ddf_left; - sprpix = sprite_ab_merge[sprpix & 255] | (sprite_ab_merge[sprpix >> 8] << 2); - sprpix <<= 1; - - // both odd and even collision bits already set? - if (((clxdat & (sprpix << 0)) == (sprpix << 0)) && ((clxdat & (sprpix << 4)) == (sprpix << 4))) { - continue; - } - - /* Loop over number of playfields. */ - for (int k = 1; k >= 0; k--) { -#ifdef AGA - int planes = aga_mode ? 8 : 6; -#else - int planes = 6; -#endif - if (bplcon0 & 0x400) { - match = 1; - } - for (int l = k; match && l < planes; l += 2) { - int t = 0; - if (l < thisline_decision.nr_planes) { - uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE); - uae_u32 word = ldata[offs >> 5]; - t = (word >> (31 - (offs & 31))) & 1; -#if 0 /* debug: draw collision mask */ - if (1) { - for (int m = 0; m < 5; m++) { - ldata = (uae_u32 *)(line_data[next_lineno] + 2 * m * MAX_WORDS_PER_LINE); - ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31)); - } - } -#endif - } - if (clxcon_bpl_enable & (1 << l)) { - if (t != ((clxcon_bpl_match >> l) & 1)) { - match = 0; - } - } - } - if (match) { -#if 0 /* debug: mark lines where collisions are detected */ - if (0) { - int l; - for (l = 0; l < 5; l++) { - uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE); - ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31)); - } - } -#endif - clxdat |= sprpix << (k * 4); - } - } + // VB + if ((reg == 0x1cc || reg == 0x1ce) && (beamcon0 & BEAMCON0_VARVBEN)) { + // check for >1 because of interlace modes + if ((reg == 0x1cc && abs(vbstrt - oldval) > 1) || (reg == 0x1ce && abs(vbstop - oldval) > 1)) { + // check VB changes only if there are not many changes per frame + varsync_maybe_changed[reg == 0x1cc ? 0 : 1]++; } } -#if 0 - { - static int olx; - if (clxdat != olx) - write_log(_T("%d: %04X\n"), vpos, clxdat); - olx = clxdat; + // HB + if ((reg == 0x1c4 || reg == 0x1c6) && exthblank) { + // only do resync if HB value has been valid at least 66% of field + varhblank_lines = (maxvpos / 3) * 2; } -#endif -} -static void check_collisions(int hpos) -{ - hpos += hpos_hsync_extra; - if (hpos < collision_hpos) { + if (!resync) { return; } - int startpos = thisline_decision.diwfirstword; - int endpos = thisline_decision.diwlastword; - if (startpos < 0 || endpos < 0) { - return; + + // TOTAL + if ((reg == 0x1c0 || reg == 0x1c8) && (beamcon0 & BEAMCON0_VARBEAMEN)) { + varsync_changed = 1; + nosignal_trigger = true; + } + // VB + if ((reg == 0x1cc || reg == 0x1ce) && (beamcon0 & BEAMCON0_VARVBEN)) { + varsync_changed = 1; } - int start = coord_diw_shres_to_window_x(collision_hpos << CCK_SHRES_SHIFT); - if (startpos < start) { - startpos = start; + // VS + if ((reg == 0x1e0 || reg == 0x1ca) && (beamcon0 & bemcon0_vsync_mask)) { + varsync_changed = 1; + nosignal_trigger = true; } - int end = coord_diw_shres_to_window_x(hpos << CCK_SHRES_SHIFT); - if (endpos > end) { - endpos = end; + // HS + if ((reg == 0x1de || reg == 0x1c2) && (beamcon0 & bemcon0_hsync_mask)) { + varsync_changed = 1; } - if (sprites_enabled_this_line || brdspractive()) { - if (currprefs.collision_level > 1) { - do_sprite_collisions(startpos, endpos); - } + + if (varsync_changed) { + varsync_maybe_changed[0] = 0; + varsync_maybe_changed[1] = 0; } - if (currprefs.collision_level > 2) { - do_playfield_collisions(startpos, endpos); + + if (varsync_changed) { + init_beamcon0(); } - collision_hpos = hpos; } -static int tospritexdiw(int diw) +#ifdef PICASSO96 +void set_picasso_hack_rate(int hz) { - int v = (coord_window_to_hw_x(diw) - DIW_DDF_OFFSET) << sprite_buffer_res; - v -= (1 << sprite_buffer_res) - 1; - return v; + struct amigadisplay *ad = &adisplays[0]; + if (!ad->picasso_on) + return; + p96refresh_active = (int)(maxvpos_stored * vblank_hz_stored / hz); + if (!currprefs.cs_ciaatod) + changed_prefs.cs_ciaatod = currprefs.cs_ciaatod = currprefs.ntscmode ? 2 : 1; + if (p96refresh_active > 0) { + new_beamcon0 |= BEAMCON0_VARBEAMEN; + } + varsync_changed = 1; } -static int tospritexddf(int ddf) +#endif + +static void BPLxPTH(uae_u16 v, int num) { - return (ddf - DIW_DDF_OFFSET - DDF_OFFSET) << sprite_buffer_res; + bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16); + bplptx[num] = (bplptx[num] & 0x0000ffff) | ((uae_u32)v << 16); } -static int fromspritexdiw(int ddf) +static void BPLxPTL(uae_u16 v, int num) { - return coord_hw_to_window_x_lores(ddf >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); + bplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe); + bplptx[num] = (bplptx[num] & 0xffff0000) | (v & 0x0000fffe); } -static void record_sprite_1(int sprxp, uae_u16 *buf, uae_u32 datab, int num, int dbl, - unsigned int mask, int do_collisions, uae_u32 collision_mask) +static uae_u16 BPLCON0_Agnus_mask(uae_u16 v) { - uae_u16 erasemask = ~(3 << (2 * num)); - int j = 0; - while (datab) { - unsigned int col = 0; - unsigned coltmp = 0; - - if ((sprxp >= sprite_minx) || brdspractive() || hstrobe_conflict) - col = (datab & 3) << (2 * num); -#if 0 - if (sprxp == sprite_minx) - col ^= (uaerand () << 16) | uaerand (); -#endif - if ((j & mask) == 0) { - unsigned int tmp = ((*buf) & erasemask) | col; - *buf++ = tmp; - if (do_collisions) - coltmp |= tmp; - sprxp++; - } - if (dbl > 0) { - unsigned int tmp = ((*buf) & erasemask) | col; - *buf++ = tmp; - if (do_collisions) - coltmp |= tmp; - sprxp++; - } - if (dbl > 1) { - unsigned int tmp; - tmp = ((*buf) & erasemask) | col; - *buf++ = tmp; - if (do_collisions) - coltmp |= tmp; - tmp = ((*buf) & erasemask) | col; - *buf++ = tmp; - if (do_collisions) - coltmp |= tmp; - sprxp++; - sprxp++; - } - j++; - datab >>= 2; - if (do_collisions) { - coltmp &= collision_mask; - if (coltmp) { - unsigned int shrunk_tmp = sprite_ab_merge[coltmp & 255] | (sprite_ab_merge[coltmp >> 8] << 2); - clxdat |= sprclx[shrunk_tmp]; - } - } + if (!ecs_agnus) { + v &= 0xff0f; + } else if (!aga_mode) { + v &= 0xffcf; } + return v; } -/* DATAB contains the sprite data; 16 pixels in two-bit packets. Bits 0/1 -determine the color of the leftmost pixel, bits 2/3 the color of the next -etc. -This function assumes that for all sprites in a given line, SPRXP either -stays equal or increases between successive calls. +static void BPLCON0_delayed(uae_u32 v) +{ + bplcon0 = v; + + check_harddis(); -The data is recorded either in lores pixels (if OCS/ECS), or in hires or -superhires pixels (if AGA). */ + setup_fmodes(bplcon0); +} -static void record_sprite(int num, int sprxp, uae_u16 *data, uae_u16 *datb, unsigned int ctl) +static void BPLCON0(uae_u16 v) { - struct sprite_entry *e = curr_sprite_entries + next_sprite_entry; - int word_offs; - uae_u32 collision_mask; - int width, dbl, half; - unsigned int mask = 0; - int attachment; - int spr_width; + uae_u16 old = bplcon0; + bplcon0_saved = v; + uae_u16 va = BPLCON0_Agnus_mask(v); - // do nothing if buffer is full (shouldn't happen normally) - if (next_sprite_entry >= end_sprite_entry) { - return; - } - if (e->first_pixel >= spixels_max) { +#if SPRBORDER + v |= 1; +#endif + if (bplcon0 == va) { return; } - half = 0; - dbl = sprite_buffer_res - sprres; - if (dbl < 0) { - half = -dbl; - dbl = 0; - mask = 1 << half; - } - spr_width = spr[num].width; - width = (spr_width << sprite_buffer_res) >> sprres; - attachment = spr[num | 1].ctl & 0x80; - - /* Try to coalesce entries if they aren't too far apart */ - /* Don't coelesce 64-bit wide sprites, needed to support FMODE change tricks */ - if (next_sprite_entry > 0 && !next_sprite_forced && e[-1].max + spr_width >= sprxp) { - e--; + // HAM, DPF, UHRES, BYPASS + if (va & (0x0800 | 0x0400 | 0x0080 | 0x0040)) { + not_safe_mode |= 1; } else { - next_sprite_entry++; - e->pos = sprxp; - e->has_attached = 0; + not_safe_mode &= ~1; } - if (sprxp < e->pos) { - write_log(_T("sprxp (%d) < e->pos (%d)\n"), sprxp, e->pos); - return; + if (!issyncstopped(va)) { + vpos_previous = vpos; + hpos_previous = agnus_hpos; } - e->max = sprxp + width; - e[1].first_pixel = e->first_pixel + ((e->max - e->pos + 3) & ~3); - next_sprite_forced = 0; - - collision_mask = clxmask[clxcon >> 12]; - word_offs = e->first_pixel + sprxp - e->pos; - - for (int i = 0; i < spr_width; i += 16) { - unsigned int da = *data; - unsigned int db = *datb; - uae_u32 datab = ((sprtaba[da & 0xFF] << 16) | sprtaba[da >> 8] - | (sprtabb[db & 0xFF] << 16) | sprtabb[db >> 8]); - int off = (i << dbl) >> half; - uae_u16 *buf = spixels + word_offs + off; - if (currprefs.collision_level > 0 && collision_mask) { - record_sprite_1(sprxp + off, buf, datab, num, dbl, mask, 1, collision_mask); - } else { - record_sprite_1(sprxp + off, buf, datab, num, dbl, mask, 0, collision_mask); - } - data++; - datb++; + if ((va & 8) && !lightpen_triggered && agnus_vb_active) { + // setting lightpen bit immediately freezes VPOSR if inside vblank and not already frozen + hhpos_lpen = HHPOSR(); + lightpen_triggered = 1; + vpos_lpen = vpos; + hpos_lpen = agnus_hpos; + } + if (!(va & 8)) { + // clearing lightpen bit immediately returns VPOSR back to normal + lightpen_triggered = 0; } - /* We have 8 bits per pixel in spixstate, two for every sprite pair. The - low order bit records whether the attach bit was set for this pair. */ - if (attachment) { - uae_u32 state = 0x01010101 << (num & ~1); - uae_u32 *stb1 = (uae_u32*)(spixstate.stb + word_offs); - for (int i = 0; i < width; i += 8) { - stb1[0] |= state; - stb1[1] |= state; - stb1 += 2; - } - e->has_attached = 1; - } - /* 64 pixel wide sprites' first 32 pixels work differently than - * last 32 pixels if FMODE is changed when sprite is being drawn - */ - if (spr_width == 64) { - uae_u16 *stbfm = spixstate.stbfm + word_offs; - uae_u16 state = (3 << (2 * num)); - for (int i = 0; i < width / 2; i += 8) { - stbfm[0] |= state; - stbfm[1] |= state; - stbfm[2] |= state; - stbfm[3] |= state; - stbfm[4] |= state; - stbfm[5] |= state; - stbfm[6] |= state; - stbfm[7] |= state; - stbfm += 8; - } - } +// BPLCON0_delayed(v); + pipelined_custom_write(BPLCON0_delayed, v, 2); } -static void add_sprite(int *countp, int num, int sprxp, int posns[], int nrs[]) +static void BPLCON1(uae_u16 v) { - int count = *countp; - int j, bestp; - - /* Sort the sprites in order of ascending X position before recording them. */ - for (bestp = 0; bestp < count; bestp++) { - if (posns[bestp] > sprxp) - break; - if (posns[bestp] == sprxp && nrs[bestp] < num) - break; - } - for (j = count; j > bestp; j--) { - posns[j] = posns[j - 1]; - nrs[j] = nrs[j - 1]; - } - posns[j] = sprxp; - nrs[j] = num; - count++; - *countp = count; - - sprites_enabled_this_line = true; + bplcon1_saved = v; + bplcon1 = v; } - -static void calcsprite(void) +static void BPLCON2(uae_u16 v) { - sprite_minx = 0; - if (thisline_decision.diwfirstword >= 0) { - sprite_minx = tospritexdiw(thisline_decision.diwfirstword); - } - if (thisline_decision.plfleft >= 0) { - int min = tospritexddf(thisline_decision.plfleft); - int max = tospritexddf(thisline_decision.plfright); - if (min > sprite_minx && min < max) { /* min < max = full line ddf */ - sprite_minx = min; - } - /* sprites are visible from first BPL1DAT write to end of line - * ECS Denise/AGA: no limits - * OCS Denise: BPL1DAT write only enables sprite if hpos >= 0x2e (OCS_DENISE_HBLANK_DISABLE_HPOS). - * (undocumented feature) - */ - } + bplcon2_saved = v; + bplcon2 = v; +} +static void BPLCON3(uae_u16 v) +{ + bplcon3_saved = v; + bplcon3 = v; +} +static void BPLCON4(uae_u16 v) +{ + bplcon4_saved = v; + bplcon4 = v; } -static int last_sprite_hpos, last_sprite_hpos_reset; +static void BPL1MOD(uae_u16 v) +{ + v &= ~1; + bpl1mod = v; +} +static void BPL2MOD(uae_u16 v) +{ + v &= ~1; + bpl2mod = v; +} -static void decide_sprites2(int start, int end, int *countp, int *nrs, int *posns) +static void BPLxDAT(int num, uae_u16 data) { - int count = *countp; - int sscanmask = 0x100 << sprite_buffer_res; + write_drga(0x110 + num * 2, 0xffffffff, data); +} - if (nodraw()) { +static void DIWSTRT(uae_u16 v) +{ + diwhigh_saved &= ~0x8000; + if (diwstrt == v && !diwhigh_written) { return; } + diwhigh_written = false; + diwstrt = v; + calcvdiw(); +} - for (int i = 0; i < MAX_SPRITES; i++) { - struct sprite *s = &spr[i]; - int xpos = spr[i].xpos; - int sprxp = (fmode & 0x8000) ? (xpos & ~sscanmask) : xpos; - int hw_xp = sprxp >> sprite_buffer_res; - - // Sprite does not start if X=0 but SSCAN2 sprite does. Don't do X == 0 check here. - if (sprxp < 0) { - continue; - } - - if (!((debug_sprite_mask & magic_sprite_mask) & (1 << i))) { - continue; - } - - if (!spr[i].armed) { - continue; - } - - // ECS Denise and superhires resolution: sprites 4 to 7 are disabled. - if (!aga_mode && ecs_denise && GET_RES_AGNUS(bplcon0) == RES_SUPERHIRES && i >= 4) { - continue; - } - - if (s->ecs_denise_hires && (bplcon0d & 0x0040)) { - xpos |= 2 >> (RES_MAX - sprite_buffer_res); - sprxp = xpos; - hw_xp = sprxp >> sprite_buffer_res; - } - - if (((hw_xp >= start) || ((spr[i].pos & 1) && hw_xp == start - 1)) && hw_xp < end) { - int xdiff = hw_xp - start; - int sprxp_abs = (last_sprite_point_abs + xdiff) << sprite_buffer_res; - // add hires/shres back - sprxp_abs |= xpos & (3 >> (RES_MAX - sprite_buffer_res)); - add_sprite(&count, i, sprxp_abs, posns, nrs); - } - - /* SSCAN2-bit is fun.. */ - if (1 && (fmode & 0x8000) && !(sprxp & sscanmask)) { - sprxp |= sscanmask; - hw_xp = sprxp >> sprite_buffer_res; - if (hw_xp >= start && hw_xp < end) { - int xdiff = hw_xp - start; - int sprxp_abs = (last_sprite_point_abs + xdiff) << sprite_buffer_res; - sprxp_abs |= xpos & (3 >> (RES_MAX - sprite_buffer_res)); - add_sprite(&count, MAX_SPRITES + i, sprxp_abs, posns, nrs); - } - } +static void DIWSTOP(uae_u16 v) +{ + diwhigh_saved &= ~0x8000; + if (diwstop == v && !diwhigh_written) { + return; } - *countp = count; - - + diwhigh_written = false; + diwstop = v; + calcvdiw(); } -static void decide_sprites(int hpos, bool quick, bool halfcycle = false) +#if 0 +static void DIWHIGH_next(uae_u32 v) { - int count = 0; - int gotdata = 0; - int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2]; - int hp = (hpos << 1) + halfcycle; + int hpos = current_hpos(); + // DIWHIGH has 1.5CCK delay + decide_hdiw(hpos, true); + decide_line(hpos); + diwhigh_written = 1; + diwhigh = v; + calcdiw(); +} +#endif - // don't bother with sprites during vblank lines - if (vb_start_line > 1) { - last_sprite_hpos = hp; +static void DIWHIGH(uae_u16 v) +{ + diwhigh_saved = v | 0x8000; + if (!ecs_agnus) { return; } - - int c = hp - last_sprite_hpos; - if (c <= 0) { - return; + if (!aga_mode) { + v &= ~(0x0010 | 0x1000); } - - if (!quick) { - decide_hdiw(hpos); - decide_line(hpos); + v &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040); + if (diwhigh_written && diwhigh == v) { + return; } + diwhigh_written = true; + diwhigh = v; + calcvdiw(); +} - if (last_sprite_hpos < (HARDWIRED_DMA_TRIGGER_HPOS << 1) && hp >= (HARDWIRED_DMA_TRIGGER_HPOS << 1)) { - last_sprite_hpos_reset = (REFRESH_FIRST_HPOS - HARDWIRED_DMA_TRIGGER_HPOS + 2) << 1; - last_sprite_hpos_reset += 1; - } +static void DDFSTRT(uae_u16 v) +{ + // DDFSTRT modified when DDFSTRT==hpos: neither value matches +ddfstrt_saved = v; +v &= ddf_mask; +ddfstrt = 0xffff; +push_pipeline(&ddfstrt, v); +} - int start = last_sprite_point; - int max = 512; +static void DDFSTOP(uae_u16 v) +{ + // DDFSTOP modified when DDFSTOP==hpos: old value matches + ddfstop_saved = v; + v &= ddf_mask; + push_pipeline(&ddfstop, v); +} - if (last_sprite_hpos_reset > 0 && c >= last_sprite_hpos_reset && !line_equ_freerun && !hstrobe_conflict) { - // strobe crossed? - last_sprite_point += last_sprite_hpos_reset + 0; - if (nr_armed) { - decide_sprites2(start, last_sprite_point, &count, nrs, posns); - } - last_sprite_point_abs += last_sprite_point - start; - last_sprite_point = 2; - start = last_sprite_point; - last_sprite_point += c - last_sprite_hpos_reset; - if (nr_armed) { - decide_sprites2(start, last_sprite_point, &count, nrs, posns); +static void FMODE(uae_u16 v) +{ + if (!aga_mode) { + if (currprefs.monitoremu) { + specialmonitor_store_fmode(vpos, agnus_hpos, v); } - last_sprite_point_abs += last_sprite_point - start; - last_sprite_hpos_reset = -1; + fmode_saved = v; + v = 0; } else { - last_sprite_point += c; - // wrap around? - if (last_sprite_point >= max) { - if (nr_armed) { - decide_sprites2(start, max, &count, nrs, posns); - } - last_sprite_point_abs += max - start; - last_sprite_point &= max - 1; - if (last_sprite_point > 0) { - if (nr_armed) { - decide_sprites2(0, last_sprite_point, &count, nrs, posns); - } - last_sprite_point_abs += last_sprite_point - 0; - } - } else { - if (nr_armed) { - decide_sprites2(start, last_sprite_point, &count, nrs, posns); - } - last_sprite_point_abs += last_sprite_point - start; - } - if (last_sprite_hpos_reset >= 0) { - last_sprite_hpos_reset -= c; - } + fmode_saved = v; } - last_sprite_hpos = hp; - - if (count > 0) { - calcsprite(); - - for (int i = 0; i < count; i++) { - int nr = nrs[i] & (MAX_SPRITES - 1); - struct sprite *s = &spr[nr]; - - // ECS Denise weird behavior in shres - if (s->ecs_denise_hires && !(bplcon0d & 0x40)) { - s->data[0] &= 0x7fff; - s->datb[0] &= 0x7fff; - } - - record_sprite(nr, posns[i], s->data, s->datb, s->ctl); - - /* get left and right sprite edge if brdsprt enabled */ -#if AUTOSCALE_SPRITES - if (dmaen(DMA_SPRITE) && brdspractive() && !(bplcon3 & 0x20) && nr > 0) { - int j, jj; - for (j = 0, jj = 0; j < sprite_width; j += 16, jj++) { - int nx = fromspritexdiw(posns[i] + j); - if (s->data[jj] || s->datb[jj]) { - if (diwfirstword_total > nx && nx >= (48 << currprefs.gfx_resolution)) { - diwfirstword_total = nx; - } - if (diwlastword_total < nx + 16 && nx <= (448 << currprefs.gfx_resolution)) { - diwlastword_total = nx + 16; - } - } - } - gotdata = 1; - } -#endif - } - -#if AUTOSCALE_SPRITES - /* get upper and lower sprite position if brdsprt enabled */ - if (gotdata) { - if (vpos < first_planes_vpos) { - first_planes_vpos = vpos; - } - if (vpos < plffirstline_total) { - plffirstline_total = vpos; - } - if (vpos > last_planes_vpos) { - last_planes_vpos = vpos; - } - if (vpos > plflastline_total) { - plflastline_total = vpos; - } - } -#endif + v &= 0xC00F; + if (fmode == v) { + return; } + set_chipset_mode(false); + setup_fmodes(bplcon0); } -static void decide_sprites(int hpos) +static void FNULL(uae_u16 v) { - decide_sprites(hpos, false, false); + } -static int sprites_differ(struct draw_info *dip, struct draw_info *dip_old) +static void BLTADAT(uae_u16 v) { - struct sprite_entry *this_first = curr_sprite_entries + dip->first_sprite_entry; - struct sprite_entry *this_last = curr_sprite_entries + dip->last_sprite_entry; - struct sprite_entry *prev_first = prev_sprite_entries + dip_old->first_sprite_entry; - - if (dip->nr_sprites != dip_old->nr_sprites) { - return 1; - } - - if (dip->nr_sprites == 0) { - return 0; - } - - return 1; -#if 0 - int npixels; - for (int i = 0; i < dip->nr_sprites; i++) { - if (this_first[i].pos != prev_first[i].pos - || this_first[i].max != prev_first[i].max - || this_first[i].has_attached != prev_first[i].has_attached) { - return 1; - } - } - - npixels = this_last->first_pixel + (this_last->max - this_last->pos) - this_first->first_pixel; - if (memcmp(spixels + this_first->first_pixel, spixels + prev_first->first_pixel, npixels * sizeof(uae_u16)) != 0) { - return 1; - } - if (memcmp(spixstate.stb + this_first->first_pixel, spixstate.stb + prev_first->first_pixel, npixels) != 0) { - return 1; - } - return 0; -#endif + maybe_blit(0); + blt_info.bltadat = v; } - -static bool color_changes_differ(struct draw_info *dip, struct draw_info *dip_old) +/* +* "Loading data shifts it immediately" says the HRM. Well, that may +* be true for BLTBDAT, but not for BLTADAT - it appears the A data must be +* loaded for every word so that AFWM and ALWM can be applied. +*/ +static void BLTBDAT(uae_u16 v) { - if (dip->nr_color_changes != dip_old->nr_color_changes) { - return true; - } - - if (dip->nr_color_changes == 0) { - return false; - } - if (memcmp(curr_color_changes + dip->first_color_change, - prev_color_changes + dip_old->first_color_change, - dip->nr_color_changes * sizeof * curr_color_changes) != 0) { - return true; + maybe_blit(0); + blt_info.bltbdat = v; + blitter_loadbdat(v); +} +static void BLTCDAT(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltcdat = v; + blitter_loadcdat(v); + reset_blit(0); +} +static void BLTAMOD(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltamod_next = (uae_s16)(v & 0xFFFE); + // this delay due to copper/cpu vs blitter timing is slightly differently implemented + blt_info.blt_mod_cycles[0] = get_cycles() + 2 * CYCLE_UNIT; + if (!copper_access) { + blt_info.bltamod = blt_info.bltamod_next; } - return false; + blitter_delayed_update = true; } - -/* End of a horizontal scan line. Finish off all decisions that were not -* made yet. */ - -static void sync_copper(int hpos); - -static void finish_partial_decision(int hpos) +static void BLTBMOD(uae_u16 v) { - sync_copper(hpos); - decide_hdiw(hpos); - decide_line(hpos); - decide_fetch_safe(hpos); - decide_sprites(hpos); - if (thisline_decision.plfleft >= 0 && thisline_decision.plfright < (hpos + hpos_hsync_extra) * 2) { - thisline_decision.plfright = (hpos + hpos_hsync_extra) * 2; + maybe_blit(0); + blt_info.bltbmod_next = (uae_s16)(v & 0xFFFE); + blt_info.blt_mod_cycles[1] = get_cycles() + 2 * CYCLE_UNIT; + if (!copper_access) { + blt_info.bltbmod = blt_info.bltbmod_next; } + blitter_delayed_update = true; } - -static void hstrobe_conflict_check(uae_u32 v) +static void BLTCMOD(uae_u16 v) { - int hpos = current_hpos(); - finish_partial_decision(hpos); - - SET_LINE_CYCLEBASED(hpos); - uae_u16 datreg = cycle_line_pipe[hpos]; - // not conflict? - if (!(datreg & CYCLE_PIPE_BITPLANE)) { - hstrobe_conflict = false; - int pos = hpos_to_diwx(hpos); - addcc(pos, 0, COLOR_CHANGE_ACTBORDER | 2); - MARK_LINE_CHANGED; + maybe_blit(0); + blt_info.bltcmod_next = (uae_s16)(v & 0xFFFE); + blt_info.blt_mod_cycles[2] = get_cycles() + 2 * CYCLE_UNIT; + if (!copper_access) { + blt_info.bltcmod = blt_info.bltcmod_next; } + blitter_delayed_update = true; } - -static void finish_decisions(int hpos) +static void BLTDMOD(uae_u16 v) { - struct amigadisplay *ad = &adisplays[0]; - struct draw_info *dip; - struct draw_info *dip_old; - struct decision *dp; - int changed; - - // update decisions to start of hsync - finish_partial_decision(hpos); - - finish_final_fetch(hpos); - - if (thisline_decision.plfleft >= 0 && thisline_decision.plflinelen < 0) { - thisline_decision.plfright = thisline_decision.plfleft; - thisline_decision.plflinelen = 0; - thisline_decision.bplres = output_res(RES_LORES); + maybe_blit(0); + blt_info.bltdmod_next = (uae_s16)(v & 0xFFFE); + blt_info.blt_mod_cycles[3] = get_cycles() + 2 * CYCLE_UNIT; + if (!copper_access) { + blt_info.bltdmod = blt_info.bltdmod_next; } - if (!ecs_denise) { - if (thisline_decision.diwfirstword < hdiwbplstart) { - thisline_decision.diwfirstword = hdiwbplstart; - } else if (hdiwbplstart < 0) { - thisline_decision.diwfirstword = -1; - thisline_decision.diwlastword = -1; + blitter_delayed_update = true; +} +static void BLTCON0(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltcon0 = v; + reset_blit(1); +} +/* The next category is "Most useless hardware register". +* And the winner is... */ +static void BLTCON0L(uae_u16 v) +{ + if (!ecs_agnus) + return; // ei voittoa. + maybe_blit(0); + blt_info.bltcon0 = (blt_info.bltcon0 & 0xFF00) | (v & 0xFF); + reset_blit(0); +} +static void BLTCON1(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltcon1 = v; + reset_blit(2); +} +static void BLTAFWM(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltafwm = v; +} +static void BLTALWM(uae_u16 v) +{ + maybe_blit(0); + blt_info.bltalwm = v; +} +static void BLTAPTH(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltapt_prev = blt_info.bltapt; + blt_info.blt_ch_cycles[0] = get_cycles(); + blt_info.bltapt = (blt_info.bltapt & 0xffff) | ((uae_u32)v << 16); +} +static void BLTAPTL(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltapt_prev = blt_info.bltapt; + blt_info.blt_ch_cycles[0] = get_cycles(); + blt_info.bltapt = (blt_info.bltapt & ~0xffff) | (v & 0xfffe); +} +static void BLTBPTH(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltbpt_prev = blt_info.bltbpt; + blt_info.blt_ch_cycles[1] = get_cycles(); + blt_info.bltbpt = (blt_info.bltbpt & 0xffff) | ((uae_u32)v << 16); +} +static void BLTBPTL(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltbpt_prev = blt_info.bltbpt; + blt_info.blt_ch_cycles[1] = get_cycles(); + blt_info.bltbpt = (blt_info.bltbpt & ~0xffff) | (v & 0xfffe); +} +static void BLTCPTH(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltcpt_prev = blt_info.bltcpt; + blt_info.blt_ch_cycles[2] = get_cycles(); + blt_info.bltcpt = (blt_info.bltcpt & 0xffff) | ((uae_u32)v << 16); +} +static void BLTCPTL(uae_u16 v) +{ + maybe_blit(1); + blt_info.bltcpt_prev = blt_info.bltcpt; + blt_info.blt_ch_cycles[2] = get_cycles(); + blt_info.bltcpt = (blt_info.bltcpt & ~0xffff) | (v & 0xfffe); +} +static void BLTDPTH(uae_u16 v) +{ +#if 0 + if (blt_info.blit_finald && copper_access) { + static int warned = 100; + if (warned > 0) { + warned--; + write_log("Possible Copper Blitter wait bug detected COP=%08x\n", cop_state.ip); } } - +#endif + maybe_blit(1); + blt_info.bltdpt_prev = blt_info.bltdpt; + blt_info.blt_ch_cycles[3] = get_cycles(); + blt_info.bltdpt = (blt_info.bltdpt & 0xffff) | ((uae_u32)v << 16); +} +static void BLTDPTL(uae_u16 v) +{ #if 0 - if (hstrobe_conflict) { - sync_color_changes(hpos + DDF_OFFSET / 2 + 1); - decide_hstrobe_hdiw(hpos); + if (blt_info.blit_finald && copper_access) { + static int warned = 100; + if (warned > 0) { + warned--; + write_log("Possible Copper Blitter wait bug detected COP=%08x\n", cop_state.ip); + } } #endif + maybe_blit(1); + blt_info.bltdpt_prev = blt_info.bltdpt; + blt_info.blt_ch_cycles[3] = get_cycles(); + blt_info.bltdpt = (blt_info.bltdpt & ~0xffff) | (v & 0xfffe); +} - // Add DDF_OFFSET to detect blanking changes past hpos max - sync_color_changes(hpos + DDF_OFFSET / 2 + 1); - - /* Large DIWSTOP values can cause the stop position never to be - * reached, so the state machine always stays in the same state and - * there's a more-or-less full-screen DIW. */ - if ((hdiwstate == diw_states::DIW_waiting_stop && thisline_decision.diwfirstword >= 0) || hstrobe_conflict) { - thisline_decision.diwlastword = max_diwlastword; +static void BLTSIZE_func(uae_u32 v) +{ + maybe_blit(1); + blt_info.vblitsize = v >> 6; + blt_info.hblitsize = v & 0x3F; + if (!blt_info.vblitsize) { + blt_info.vblitsize = 1024; } - - if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword) { - MARK_LINE_CHANGED; + if (!blt_info.hblitsize) { + blt_info.hblitsize = 64; } - if (thisline_decision.diwlastword != line_decisions[next_lineno].diwlastword) { - MARK_LINE_CHANGED; + do_blitter(copper_access, copper_access ? cop_state.ip : M68K_GETPC); +} +static void BLTSIZV_func(uae_u32 v) +{ + maybe_blit(0); + blt_info.vblitsize = v & 0x7FFF; + if (!blt_info.vblitsize) { + blt_info.vblitsize = 0x8000; } +} - dip = curr_drawinfo + next_lineno; - dip_old = prev_drawinfo + next_lineno; - dp = line_decisions + next_lineno; - changed = thisline_changed | ad->custom_frame_redraw_necessary; - if (thisline_decision.plfleft >= 0 && thisline_decision.nr_planes > 0) { - record_diw_line(thisline_decision.plfleft, diwfirstword, diwlastword); +static void BLTSIZH_func(uae_u32 v) +{ + maybe_blit(0); + blt_info.hblitsize = v & 0x7FF; + if (!blt_info.vblitsize) { + blt_info.vblitsize = 0x8000; } - - dip->last_sprite_entry = next_sprite_entry - 1; - dip->last_color_change = next_color_change; - - if (thisline_decision.ctable < 0) { - if (thisline_decision.plfleft < 0) { - remember_ctable_for_border(); - } else { - remember_ctable(); - } + if (!blt_info.hblitsize) { + blt_info.hblitsize = 0x0800; } + do_blitter(copper_access, copper_access ? cop_state.ip : M68K_GETPC); +} - dip->nr_color_changes = next_color_change - dip->first_color_change; - if (dip->nr_color_changes < 0) { - write_log("negative nr_color_changes: %d. FIXME!\n", dip->nr_color_changes); - dip->nr_color_changes = 0; +static void BLTSIZE(int hpos, uae_u16 v) +{ + int wait = currprefs.m68k_speed == 0 && currprefs.blitter_cycle_exact; + pipelined_custom_write(BLTSIZE_func, v, wait); +} +static void BLTSIZV(int hpos, uae_u16 v) +{ + if (ecs_agnus) { + int wait = currprefs.m68k_speed == 0 && currprefs.blitter_cycle_exact; + pipelined_custom_write(BLTSIZV_func, v, wait); } - dip->nr_sprites = next_sprite_entry - dip->first_sprite_entry; - - if (thisline_decision.plfleft != line_decisions[next_lineno].plfleft) { - changed = 1; +} +static void BLTSIZH(int hpos, uae_u16 v) +{ + if (ecs_agnus) { + int wait = currprefs.m68k_speed == 0 && currprefs.blitter_cycle_exact; + pipelined_custom_write(BLTSIZH_func, v, wait); } - if (!changed && color_changes_differ(dip, dip_old)) { - changed = 1; +} + +static void sprstartstop(struct sprite *s) +{ + if (agnus_vb_active) { + return; } - if (!changed && /* bitplane visible in this line OR border sprites enabled */ - (thisline_decision.plfleft >= 0 || ((thisline_decision.bplcon0 & 1) && (thisline_decision.bplcon3 & 0x02) && !(thisline_decision.bplcon3 & 0x20))) - && sprites_differ(dip, dip_old)) - { - changed = 1; + if (vpos == s->vstart) { + s->dmastate = 1; } - - if (changed) { - thisline_changed = 1; - *dp = thisline_decision; - } else { - /* The only one that may differ: */ - dp->ctable = thisline_decision.ctable; + if (vpos == s->vstop) { + s->dmastate = 0; + s->dmacycle = 0; } +} - check_collisions(hpos); +static void SPRxCTLPOS(int num) +{ + struct sprite *s = &spr[num]; - if (next_color_change >= MAX_REG_CHANGE - 30) { - write_log(_T("color_change buffer overflow!\n")); - next_color_change = 0; - last_color_change = 0; - dip->nr_color_changes = 0; - dip->first_color_change = 0; - dip->last_color_change = 0; + s->vstart = s->pos >> 8; + s->vstart |= (s->ctl & 0x04) ? 0x0100 : 0; + s->vstop = s->ctl >> 8; + s->vstop |= (s->ctl & 0x02) ? 0x100 : 0; + if (ecs_agnus) { + s->vstart |= (s->ctl & 0x40) ? 0x0200 : 0; + s->vstop |= (s->ctl & 0x20) ? 0x0200 : 0; + } + s->dblscan = false; +#ifdef AGA + if (aga_mode) { + s->dblscan = (s->pos & 0x80) != 0; } +#endif } -static void set_ocs_denise_blank(uae_u32 v) +static void SPRxCTL(uae_u16 v, int num) { - int hpos = current_hpos(); - sync_color_changes(hpos); - int pos = hpos_to_diwx(hpos) + 2; // +1 hires - record_color_change2(-pos, 0, COLOR_CHANGE_BLANK | 1); + struct sprite *s = &spr[num]; + + s->ctl = v; + sprstartstop(s); + SPRxCTLPOS(num); + sprstartstop(s); } -static void reset_ocs_denise_blank(uae_u32 v) +static void SPRxCTL_DMA(uae_u16 v, int num) { - int hpos = current_hpos(); - sync_color_changes(hpos); - int pos = hpos_to_diwx(hpos) + 2; // +1 hires - record_color_change2(-pos, 0, COLOR_CHANGE_BLANK | 0); + struct sprite *s = &spr[num]; + + s->ctl = v; + sprstartstop(s); + SPRxCTLPOS(num); + // This is needed to disarm previous field's sprite. + // It can be seen on OCS Agnus + ECS Denise combination where + // this cycle is disabled due to weird DDFTSTR=$18 copper list + // which causes corrupted sprite to "wrap around" the display. + s->dmastate = 0; + sprstartstop(s); +} +static void SPRxPOS(uae_u16 v, int num) +{ + struct sprite *s = &spr[num]; + + s->pos = v; + sprstartstop(s); + SPRxCTLPOS(num); + sprstartstop(s); } -/* Set the state of all decisions to "undecided" for a new scanline. */ -static void reset_decisions_scanline_start(void) +// Undocumented AGA feature: if sprite is 64 pixel wide, SPRxDATx is written and next +// cycle is DMA fetch: sprite's first 32 pixels get replaced with bitplane data. +#if 0 +static void sprite_get_bpl_data(int hpos, struct sprite *s, uae_u16 *dat) { - if (nodraw()) - return; + int nr = get_bitplane_dma_rel(hpos, 1); + uae_u32 v = (uae_u32)((fmode & 3) ? fetched_aga[nr] : fetched_aga_spr[nr]); + dat[0] = v >> 16; + dat[1] = (uae_u16)v; +} +#endif - if (hstrobe_conflict) { - event2_newevent_xx(-1, REFRESH_FIRST_HPOS * CYCLE_UNIT, 0, hstrobe_conflict_check); - } +/* + SPRxDATA and SPRxDATB is moved to shift register when SPRxPOS matches. - last_decide_line_hpos = 0; - last_decide_sprite_hpos = 0; - last_fetch_hpos = 0; - last_copper_hpos = 0; - ddfstrt_hpos = -1; - ddfstop_hpos = -1; - last_diw_hpos = 0; - last_sprite_hpos = 0; - last_sprite_hpos_reset = 0; - blt_info.finishhpos = -1; + When copper writes to SPRxDATx exactly when SPRxPOS matches: + - If sprite low x bit (SPRCTL bit 0) is not set, shift register copy + is done first (previously loaded SPRxDATx value is shown) and then + new SPRxDATx gets stored for future use. + - If sprite low x bit is set, new SPRxDATx is stored, then SPRxPOS + matches and value written to SPRxDATx is visible. - /* Default to no bitplane DMA overriding sprite DMA */ - plfstrt_sprite = 0x100; - sprbplconflict_hpos = -1; - sprbplconflict_hpos2 = -1; - bprun_end = 0; + - Writing to SPRxPOS when SPRxPOS matches: shift register + copy is always done first, then new SPRxPOS value is stored + for future use. (SPRxCTL not tested) +*/ - // clear sprite allocations - for (int i = 0; i < maxhposm0; i++) { - uae_u16 v = cycle_line_pipe[i]; - if (v & CYCLE_PIPE_SPRITE) { - cycle_line_pipe[i] = 0; +#if 0 +static void SPRxDATA(uae_u16 v, int num) +{ + struct sprite *s = &spr[num]; + SPRxDATA_1(v, num); + // if 32 (16-bit double CAS only) or 64 pixel wide sprite and SPRxDATx write: + // - first 16 pixel part: previous chipset bus data + // - following 16 pixel parts: written data + if (fmode & 8) { + if ((fmode & 4) && get_bitplane_dma_rel(hpos, -1)) { + sprite_get_bpl_data(hpos, s, &s->data[0]); + } else { + s->data[0] = last_custom_value; } } +} - if (!ecs_denise && currprefs.gfx_overscanmode > OVERSCANMODE_OVERSCAN) { - if (!ecs_agnus) { - if (vb_start_line == 2 + vblank_extraline) { - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, set_ocs_denise_blank); - } +static void SPRxDATB(uae_u16 v, int num) +{ + struct sprite *s = &spr[num]; + SPRxDATB_1(v, num); + // See above + if (fmode & 8) { + if ((fmode & 4) && get_bitplane_dma_rel(hpos, -1)) { + sprite_get_bpl_data(hpos, s, &s->datb[0]); } else { - if (vb_start_line == 1 + vblank_extraline) { - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, set_ocs_denise_blank); - } - } - if (vb_end_next_line2) { - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, reset_ocs_denise_blank); + s->datb[0] = last_custom_value; } } +} +#endif +static void SPRxPTH(uae_u16 v, int num) +{ + spr[num].pt &= 0xffff; + spr[num].pt |= (uae_u32)v << 16; } -static void get_strobe_conflict_shift(int hpos) +static void SPRxPTL(uae_u16 v, int num) { - // Because Denise hcounter is not synced to Agnus hcounter, - // BPLCON1 offset changes every line, causing jagged display. - int unalign = hpos * 2 + hdiw_counter; - unalign /= 2; - unalign -= 4; - unalign &= 7; - unalign *= 2; - delay_cycles = unalign << LORES_TO_SHRES_SHIFT; + spr[num].pt &= ~0xffff; + spr[num].pt |= v & ~1; } -static uae_u16 BPLCON0_Denise_mask(uae_u16 v) +static void CLXCON(uae_u16 v) { - if (!ecs_denise) { - v &= ~0x00F1; - } else if (!aga_mode) { - v &= ~0x00B0; - } + clxcon = v; +} - v &= ~((currprefs.cs_color_burst ? 0x0000 : 0x0200) | 0x0100 | 0x0080 | 0x0020); -#if SPRBORDER - v |= 1; -#endif - return v; +static void CLXCON2(uae_u16 v) +{ + if (!aga_mode) + return; + clxcon2 = v; } -static uae_u16 BPLCON0_Agnus_mask(uae_u16 v) +static uae_u16 CLXDAT(void) { - if (!ecs_agnus) { - v &= 0xff0f; - } else if (!aga_mode) { - v &= 0xffcf; - } + uae_u16 v = clxdat | 0x8000; + clxdat = 0; return v; } -static void reset_decisions_hsync_start(void) -{ - if (nodraw()) { - return; - } +#ifdef AGA - int hpos = current_hpos(); +void dump_aga_custom(void) +{ + int c1, c2, c3, c4; + uae_u32 rgb1, rgb2, rgb3, rgb4; - thisline_decision.diwfirstword = -1; - thisline_decision.diwlastword = -1; - // hdiw already open? - if (hdiwstate == diw_states::DIW_waiting_stop) { - thisline_decision.diwfirstword = min_diwlastword; - if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword) { - MARK_LINE_CHANGED; - } + for (c1 = 0; c1 < 64; c1++) { + c2 = c1 + 64; + c3 = c2 + 64; + c4 = c3 + 64; + rgb1 = denise_colors.color_regs_aga[c1]; + rgb2 = denise_colors.color_regs_aga[c2]; + rgb3 = denise_colors.color_regs_aga[c3]; + rgb4 = denise_colors.color_regs_aga[c4]; + console_out_f (_T("%3d %08X %3d %08X %3d %08X %3d %08X\n"), + c1, rgb1, c2, rgb2, c3, rgb3, c4, rgb4); } - hdiwbplstart = -1; - - thisline_decision.ctable = -1; - thisline_changed = 0; - - curr_drawinfo[next_lineno].first_color_change = next_color_change; - last_color_change = next_color_change; - curr_drawinfo[next_lineno].first_sprite_entry = next_sprite_entry; - next_sprite_forced = 1; - last_sprite_point_abs = ((1 + (hpos - REFRESH_FIRST_HPOS - 2)) << 1) + 1; - hdiw_denisecounter_abs = ((1 + (hpos - REFRESH_FIRST_HPOS - 2)) << CCK_SHRES_SHIFT) + 0; - - sprites_enabled_this_line = false; - bpl1mod_hpos = -1; - bpl2mod_hpos = -1; - last_recorded_diw_hpos = 0; - collision_hpos = 0; - - vhposr_delay_offset = 0; - vhposw_modified = false; +} - compute_toscr_delay(bplcon1); +static uae_u16 COLOR_READ(int num) +{ + int cr, cg, cb, colreg; + uae_u16 cval; - last_diwlastword = -1; - hb_last_diwlastword = -1; + if (!aga_mode || !(bplcon2 & 0x0100)) + return 0xffff; - if (line_cyclebased > 0) { - line_cyclebased--; + colreg = ((bplcon3 >> 13) & 7) * 32 + num; + cr = (denise_colors.color_regs_aga[colreg] >> 16) & 0xFF; + cg = (denise_colors.color_regs_aga[colreg] >> 8) & 0xFF; + cb = denise_colors.color_regs_aga[colreg] & 0xFF; + if (bplcon3 & 0x200) { + cval = ((cr & 15) << 8) | ((cg & 15) << 4) | ((cb & 15) << 0); + } else { + cval = ((cr >> 4) << 8) | ((cg >> 4) << 4) | ((cb >> 4) << 0); + if (denise_colors.color_regs_genlock[num]) { + cval |= 0x8000; + } } + return cval; +} +#endif - if (toscr_scanline_complex_bplcon1_off) { - toscr_scanline_complex_bplcon1_off = false; - toscr_scanline_complex_bplcon1 = false; +bool get_custom_color_reg(int colreg, uae_u8 *r, uae_u8 *g, uae_u8 *b) +{ + if (colreg < 0) + return false; + if (colreg >= 32 && !aga_mode) { + return false; + } + if (colreg >= 256) { + return false; + } + if (aga_mode) { + *r = (denise_colors.color_regs_aga[colreg] >> 16) & 0xFF; + *g = (denise_colors.color_regs_aga[colreg] >> 8) & 0xFF; + *b = denise_colors.color_regs_aga[colreg] & 0xFF; + } else { + *r = (denise_colors.color_regs_ecs[colreg] >> 8) & 15; + *r |= (*r) << 4; + *g = (denise_colors.color_regs_ecs[colreg] >> 4) & 15; + *g |= (*g) << 4; + *b = (denise_colors.color_regs_ecs[colreg] >> 0) & 15; + *b |= (*b) << 4; } + return true; +} -#if BPL_ERASE_TEST - for (int n = 0; n < 8; n++) { - static uae_u8 v; - v += 2; - uae_u8 *dataptr = line_data[next_lineno] + n * MAX_WORDS_PER_LINE * 2; - memset(dataptr, v ^ vpos, MAX_WORDS_PER_LINE * 2); +bool blitter_cant_access(void) +{ + if (!is_blitter_dma()) { + return true; } -#endif + return false; +} - if (toscr_nr_planes3 < toscr_nr_planes2 && toscr_nr_planes3 > 0 && out_offs > 0) { - for (int n = toscr_nr_planes3; n < toscr_nr_planes2; n++) { - uae_u8 *dataptr = line_data[next_lineno] + n * MAX_WORDS_PER_LINE * 2; - memset(dataptr, 0, out_offs * 4); +static int get_reg_chip(int reg) +{ + if (reg == 0x100 || reg == 0x1fc) { + return 3; + } else if (reg >= 0x102 && reg < 0x108) { + return 1 | 2; + } else if (reg == 0x10c) { + return 1 | 2; + } else if (reg == 0x8e || reg == 0x90 || reg == 0x1e4) { + return 3; + } else if (reg >= 0x180 && reg < 0x180 + 32 * 2) { + return 2; + } else if (reg >= 0x140 && reg < 0x140 + 8 * 8) { + if (reg & 4) { + return 2 + 4; } + return 3; + } else if (reg >= 0x110 && reg < 0x110 + 8 * 2) { + return 2; + } else if (reg == 0x02c) { + return 3; + } else if (reg == 0x1c4 || reg == 0x1c6) { + return 3; + } else if (reg == 0x098 || reg == 0x10e) { + return 3; + } else if (reg >= 0x38 && reg < 0x40) { + return 2; } + return 1; +} - reset_bpl_vars(); +static void custom_wput_pipelined(uaecptr pt, uae_u16 v) +{ + pipelined_write_addr = pt; + pipelined_write_value = v; +} - /* These are for comparison. */ - thisline_decision.bplcon0 = bplcon0; - thisline_decision.bplcon2 = bplcon2; -#ifdef ECS_DENISE - thisline_decision.bplcon3 = bplcon3; +static void custom_wput_copper(uaecptr pt, uaecptr addr, uae_u32 value, int noget) +{ +#ifdef DEBUGGER + value = debug_putpeekdma_chipset(0xdff000 + addr, value, MW_MASK_COPPER, 0x08c); #endif -#ifdef AGA - thisline_decision.bplcon4bm = bplcon4; - thisline_decision.bplcon4sp = bplcon4; - thisline_decision.fmode = fmode; - - if (!aga_mode && ecs_denise && exthblank) { - // ECS Denise + EXTBLANK: VBLANK blanking is different. - if (new_beamcon0 & BEAMCON0_BLANKEN) { - // Follow Agnus VBLANK state directly via CSYNC connection. Ignore strobe vblank state. - thisline_decision.vb = vb_state || vb_end_line ? VB_PRGVB : VB_NOVB; - } else { - // CSYNC: follow CSYNC state - thisline_decision.vb = vs_state_on ? VB_PRGVB : VB_NOVB; - } - } else if (ecs_agnus) { - // Visible vblank end is delayed by 1 line - thisline_decision.vb = vb_start_line >= 2 + vblank_extraline || vb_end_next_line ? 0 : VB_NOVB; - if (hstrobe_conflict && strobe_vblank && thisline_decision.vb) { - thisline_decision.vb = VB_XBLANK; - } - } else { - thisline_decision.vb = vb_start_line >= 2 + vblank_extraline || vb_end_next_line ? 0 : VB_NOVB; - if (hstrobe_conflict && strobe_vblank && thisline_decision.vb) { - thisline_decision.vb = VB_XBLANK; - } - } - - // if programmed vblank - if ((new_beamcon0 & BEAMCON0_VARVBEN) && ecs_agnus) { - if (!thisline_decision.vb) { - thisline_decision.vb |= VB_PRGVB; - } + copper_access = 1; + int reg = addr & 0x1fe; + int c = get_reg_chip(reg); + if (c & 1) { + //custom_wput_pipelined(addr, value); + custom_wput_1(addr, value, 1 | 0x8000); } - - // doublescan last line garbage workaround - if (doflickerfix_active()) { - if (!(thisline_decision.vb & VB_PRGVB)) { - if ((vpos < maxvpos_display_vsync) || (lof_display && vpos >= maxvpos - 1) || (!lof_display && vpos >= maxvpos - 1)) { - thisline_decision.vb = VB_XBORDER; - } + if (c & 2) { + if (c & 4) { + value <<= 16; } + write_drga(reg, pt, value); } -#endif + copper_access = 0; +} - if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - if (thisline_decision.vb != VB_NOVB) { - thisline_decision.vb = VB_VB | VB_NOVB; - } - if ((vs_state_var && (new_beamcon0 & BEAMCON0_VARVSYEN)) || (vs_state_hw && !(new_beamcon0 & BEAMCON0_VARVSYEN))) { - thisline_decision.vb |= VB_VS; - } +static void bprun_start(int hpos) +{ + bpl_hstart = hpos; + fetch_cycle = 0; + if (ddffirstword_total > hpos) { + ddffirstword_total = hpos + 4 + 8; } - if (nosignal_status == 1) { - thisline_decision.vb = VB_XBLANK; - MARK_LINE_CHANGED; - } else if (nosignal_status < 0) { - MARK_LINE_CHANGED; + if (bplcon0_planes > 0 && plffirstline_total > linear_vpos) { + plffirstline_total = linear_vpos; } +} - int left = thisline_decision.plfleft; +/* + CPU write COPJMP wakeup sequence when copper is waiting: + - Idle cycle (can be used by other DMA channel) + - Read word from current copper pointer (next word after wait instruction) to 1FE + This cycle can conflict with blitter DMA. + Normal copper cycles resume + - Write word from new copper pointer to 8C +*/ - bpl_shifter = 0; - thisline_decision.plfleft = -1; - thisline_decision.plflinelen = -1; - thisline_decision.plfright = -1; - thisline_decision.ham_seen = isham(bplcon0); - thisline_decision.ehb_seen = isehb(bplcon0, bplcon2); - thisline_decision.ham_at_start = (bplcon0 & 0x800) != 0; - thisline_decision.bordersprite_seen = issprbrd(-1, bplcon0, bplcon3); - thisline_decision.xor_seen = (bplcon4 & 0xff00) != 0; - thisline_decision.nr_planes = toscr_nr_planes_agnus; +static int coppercomp(int hpos, bool blitwait) +{ + int hpos_cmp = hpos; + int vpos_cmp = vpos; - // workaround for glitches in faster modes - // update Denise state immediately if bitplane DMA is idle and shifters are empty - if (!bprun && !plane0 && !plane0p) { - uae_u16 bcon0 = BPLCON0_Denise_mask(bplcon0); - toscr_nr_planes_shifter = GET_PLANES(bcon0); + // If waiting for last cycle of line and last cycle is even cycle: + // Horizontal counter has already wrapped around to zero. + if (hpos_cmp == maxhposm1 && maxhposeven == COPPER_CYCLE_POLARITY) { + hpos_cmp = 0; } - toscr_nr_planes2 = GET_PLANES(bplcon0d); - if (isocs7planes()) { - if (toscr_nr_planes2 < 6) { - toscr_nr_planes2 = 6; - } + int vp = vpos_cmp & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); + int hp = hpos_cmp & (cop_state.ir[1] & 0xFE); + + if (vp < cop_state.vcmp) { + return -1; } - toscr_nr_planes3 = toscr_nr_planes2; - toscr_nr_changed = false; - thisline_decision.max_planes = toscr_nr_planes2 > toscr_nr_planes_agnus ? toscr_nr_planes2 : toscr_nr_planes_agnus; + // Cycle 0: copper can't wake up + if (hpos == 0) { + return 1; + } - hpos_hsync_extra = 0; - bool normalstart = true; - plane0p_enabled = ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x20); - plane0p_forced = false; - plane0_first_done = false; - speedup_first = true; - delay_cycles = ((hpos) * 2 - DDF_OFFSET + 0) << LORES_TO_SHRES_SHIFT; - delay_cycles2 = delay_cycles; - set_delay_lastcycle(); - if (hstrobe_conflict) { - get_strobe_conflict_shift(hpos); - } - - if (1 && fetchmode >= 2 && !doflickerfix_active()) { - // handle bitplane data wrap around - bool toshift = false; - if ((exthblank || (beamcon0 & bemcon0_hsync_mask)) && (thisline_decision.bplres == 0 || currprefs.chipset_hr)) { - for (int i = 0; i < thisline_decision.nr_planes; i++) { - if (todisplay2_aga_saved[i]) { - toshift = true; - } - } - } - if (bprun != 0 || todisplay_fetched || plane0 || plane0p || toshift) { - normalstart = false; - SET_LINE_CYCLEBASED(hpos); - if (toscr_hend == 2) { - for (int i = 0; i < MAX_PLANES; i++) { - todisplay[i] = todisplay_saved[i]; - todisplay_aga[i] = todisplay_aga_saved[i]; - todisplay2[i] = todisplay2_saved[i]; - todisplay2_aga[i] = todisplay2_aga_saved[i]; - } - todisplay_fetched = todisplay_fetched_saved; - } - if (plane0p) { - beginning_of_plane_block_early(hpos); - plane0p = false; - } - if (plane0) { - beginning_of_plane_block(hpos); - plane0 = false; + if ((cop_state.ir[1] & 0x8000) == 0) { + if (blit_busy(false)) { + if (blitwait) { + /* We need to wait for the blitter. */ + cop_state.state = COP_bltwait; + return -2; } - // make sure bprun stays enabled until next line - bprun_pipeline_flush_delay = maxhpos; - plane0p_enabled = true; - plane0p_forced = true; - bpl_shifter = -1; + return 1; } } - // HBLANK start before HSYNC (or HBLANK never triggered) and BPL1DAT between HBLANK and HSYNC? - if (exthblank) { - int hblankstart = -1; - if (last_hblank_start >= 0) { - hblankstart = diw_to_hpos(last_hblank_start + 4); - } else if (exthblank_state) { - hblankstart = last_bpl1dat_hpos - 1; - } else { - // AGA only, ECS Denise sees HBLANK in CSYNC blank line which always opens border. - if (aga_mode) { - // no hblank start: Border stays in closed state - start_noborder(hpos); - } - } - if (hblankstart >= 0) { - int bpl1 = last_bpl1dat_hpos; - if (bpl1 < hblankstart) { - bpl1 += maxhpos; - } - int hp = hpos; - if (hp < hblankstart || hp < bpl1) { - hp += maxhpos; - } - int comp = maxhpos / 2 - 1; - if (bpl1 > hblankstart && bpl1 < hp && (bpl1 - hblankstart) < comp && (bpl1 - hp) < comp) { - // Close border. (HBLANK start opens border, BPL1DAT closes it) - start_noborder(hpos); - } - } + if (vp > cop_state.vcmp) { + return 0; } - // vblank end and bitplane was active inside vblank: borderblank bug - if (ecs_agnus && ecs_denise && vb_end_next_line2 && last_bpl1dat_hpos >= 0) { - start_noborder(hpos); + if (vp == cop_state.vcmp && hp >= cop_state.hcmp) { + return 0; } - if (last_bpl1dat_hpos_early && !bpl_shifter) { - // BPLxDAT access already happened between refresh slot and hsync (this hpos): - // Close border - start_noborder(hpos); - } + return 1; +} - if (normalstart) { - plane0 = false; - plane0p = false; - memset(outword, 0, sizeof outword); - // fetched[] must not be cleared (Sony VX-90 / Royal Amiga Force) - todisplay_fetched = 0; - //memset(todisplay, 0, sizeof todisplay); - memset(todisplay2, 0, sizeof todisplay2); -#ifdef AGA - if (aga_mode || ALL_SUBPIXEL) { - //memset(todisplay_aga, 0, sizeof todisplay_aga); - memset(todisplay2_aga, 0, sizeof todisplay2_aga); - memset(outword64, 0, sizeof outword64); - memset(outword64_extra, 0, sizeof outword64_extra); +static void compute_spcflag_copper(void) +{ + copper_enabled_thisline = 0; + if (cop_state.strobe_next == COP_stop) { + if (!is_copper_dma(true) || (cop_state.state == COP_stop || cop_state.state == COP_waitforever || cop_state.state == COP_bltwait || cop_state.state == COP_bltwait2) || custom_disabled) + return; + if (cop_state.state == COP_wait1 && is_copper_dma(false)) { + int vp = vpos & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); + if (vp < cop_state.vcmp) { + return; + } } -#endif } + if (issyncstopped_count <= 2) { + copper_enabled_thisline = 1; + } +} +void blitter_done_notify(void) +{ + if (cop_state.state != COP_bltwait) { + return; + } + cop_state.state = COP_wait1; + compute_spcflag_copper(); #ifdef DEBUGGER - if (debug_dma && (new_beamcon0 & bemcon0_hsync_mask)) { - record_dma_event(DMA_EVENT_HSS, hpos, vpos); - record_dma_event(DMA_EVENT_HSE, hsstop, vpos); + if (copper_enabled_thisline) { + if (debug_dma) { + record_dma_event(DMA_EVENT_COPPERWAKE); + } + if (debug_copper) { + int hpos = current_hpos(); + record_copper_blitwait(cop_state.ip - 4, hpos, vpos); + } } #endif - - toscr_hend = 0; - last_bpl1dat_hpos = -1; - last_bpl1dat_hpos_early = false; - last_hblank_start = -1; - hcenterblank_state = false; - hstrobe_hdiw_min = hsyncstartpos_start_cycles; - if (hstrobe_conflict) { - SET_LINE_CYCLEBASED(hpos); - } } -frame_time_t vsynctimebase_orig; - -void compute_vsynctime(void) +static void cursorsprite(struct sprite *s) { - float svpos = maxvpos_nom + 0.0f; - float shpos = maxhpos_short + 0.0f; - float syncadjust = 1.0; - - fake_vblank_hz = 0; - vblank_hz_mult = 0; - vblank_hz_state = 1; - if (fabs (currprefs.chipset_refreshrate) > 0.1) { - syncadjust = currprefs.chipset_refreshrate / vblank_hz_nom; - vblank_hz = currprefs.chipset_refreshrate; - if (isvsync_chipset() && !currprefs.gfx_variable_sync) { - int mult = 0; - if (getvsyncrate(0, vblank_hz, &mult) != vblank_hz) { - vblank_hz = getvsyncrate(0, vblank_hz, &vblank_hz_mult); - if (vblank_hz_mult > 0) { - vblank_hz_state = 0; - } - } - } + if (!dmaen(DMA_SPRITE) || first_planes_vpos == 0) { + return; } - if (!fake_vblank_hz) - fake_vblank_hz = vblank_hz; - - if (currprefs.turbo_emulation) { - if (currprefs.turbo_emulation_limit > 0) { - vsynctimebase = (frame_time_t)(syncbase / currprefs.turbo_emulation_limit); - } else { - vsynctimebase = 1; - } - } else { - vsynctimebase = (frame_time_t)(syncbase / fake_vblank_hz); + sprite_0 = s->pt; + sprite_0_height = s->vstop - s->vstart; + sprite_0_colors[0] = 0; + sprite_0_doubled = 0; + int sprres = !aga_mode || !(bplcon3 & 0x80) ? 0 : 1; + if (sprres == 0) { + sprite_0_doubled = 1; } - vsynctimebase_orig = vsynctimebase; - - if (linetoggle) { - shpos += 0.5f; + if (spr[0].dblscan) { + sprite_0_height /= 2; } - if (interlace_seen) { - svpos += 0.5f; - } else if (lof_display) { - svpos += 1.0f; + if (aga_mode) { + int sbasecol = ((bplcon4 >> 4) & 15) << 4; + sprite_0_colors[1] = denise_colors.color_regs_aga[sbasecol + 1] & 0xffffff; + sprite_0_colors[2] = denise_colors.color_regs_aga[sbasecol + 2] & 0xffffff; + sprite_0_colors[3] = denise_colors.color_regs_aga[sbasecol + 3] & 0xffffff; + } else { + sprite_0_colors[1] = xcolors[denise_colors.color_regs_ecs[17] & 0xfff]; + sprite_0_colors[2] = xcolors[denise_colors.color_regs_ecs[18] & 0xfff]; + sprite_0_colors[3] = xcolors[denise_colors.color_regs_ecs[19] & 0xfff]; } - if (currprefs.produce_sound > 1) { - float clk = svpos * shpos * fake_vblank_hz; - write_log(_T("SNDRATE %.1f*%.1f*%.6f=%.6f\n"), svpos, shpos, fake_vblank_hz, clk); - devices_update_sound(clk, syncadjust); + sprite_0_width = sprite_width; + if (currprefs.input_tablet && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MAGIC)) { + if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive()) { + magic_sprite_mask &= ~1; + } else { + magic_sprite_mask |= 1; + } } - devices_update_sync(svpos, syncadjust); } -void getsyncregisters(uae_u16 *phsstrt, uae_u16 *phsstop, uae_u16 *pvsstrt, uae_u16 *pvsstop) +static int calculate_linetype(int vp) { - *phsstrt = hsstrt; - *phsstop = hsstop_detect2 / 2; - *pvsstrt = vsstrt; - *pvsstop = vsstop; + int lineno = vp; + nextline_how = nln_normal; + if (doflickerfix_active()) { + lineno *= 2; + if (!lof_display) { + lineno++; + nextline_how = nln_lower; + } else { + nextline_how = nln_upper; + } + } else if (!interlace_seen && doublescan <= 0 && currprefs.gfx_vresolution && currprefs.gfx_pscanlines > 1) { + lineno *= 2; + if (display_vsync_counter & 1) { + lineno++; + nextline_how = currprefs.gfx_pscanlines == 3 ? nln_lower_black_always : nln_lower_black; + } else { + nextline_how = currprefs.gfx_pscanlines == 3 ? nln_upper_black_always : nln_upper_black; + } + } else if ((doublescan <= 0 || interlace_seen > 0) && currprefs.gfx_vresolution && currprefs.gfx_iscanlines) { + lineno *= 2; + if (interlace_seen) { + if (!lof_display) { + lineno++; + nextline_how = currprefs.gfx_iscanlines == 2 ? nln_lower_black_always : nln_lower_black; + } else { + nextline_how = currprefs.gfx_iscanlines == 2 ? nln_upper_black_always : nln_upper_black; + } + } else { + nextline_how = currprefs.gfx_vresolution > VRES_NONDOUBLE && currprefs.gfx_pscanlines == 1 ? nln_nblack : nln_doubled; + } + } else if (currprefs.gfx_vresolution && (doublescan <= 0 || interlace_seen > 0)) { + lineno *= 2; + if (interlace_seen) { + if (!lof_display) { + lineno++; + nextline_how = nln_lower; + } else { + nextline_how = nln_upper; + } + } else { + nextline_how = currprefs.gfx_vresolution > VRES_NONDOUBLE && currprefs.gfx_pscanlines == 1 ? nln_nblack : nln_doubled; + } + } + return lineno; } -static void dumpsync(void) +static frame_time_t rpt_vsync(int adjust) { - static int cnt = 100; - if (cnt < 0) { - return; + frame_time_t curr_time = read_processor_time(); + frame_time_t v = curr_time - vsyncwaittime + adjust; + if (v > syncbase || v < -syncbase) { + vsyncmintime = vsyncmaxtime = vsyncwaittime = curr_time; + v = 0; } - cnt--; - write_log(_T("BEAMCON0=%04X VTOTAL=%04X (%03d) HTOTAL=%04X (%03d)\n"), new_beamcon0, vtotal, vtotal, htotal, htotal); - write_log(_T(" HS=%04X-%04X (%d-%d) HB=%04X-%04X (%d-%d) HC=%04X (%d)\n"), - hsstrt, hsstop, hsstrt, hsstop, hbstrt, hbstop, hbstrt, hbstop, hcenter, hcenter); - write_log(_T(" VS=%04X-%04X (%d-%d) VB=%04X-%04X (%d-%d)\n"), - vsstrt, vsstop, vsstrt, vsstop, vbstrt, vbstop, vbstrt, vbstop); - write_log(_T(" HSYNCSTART=%04X.%X (%d.%d) HSYNCEND=%04X.%X (%d.%d)\n"), - hsyncstartpos >> CCK_SHRES_SHIFT, hsyncstartpos & ((1 << CCK_SHRES_SHIFT) - 1), - hsyncstartpos >> CCK_SHRES_SHIFT, hsyncstartpos & ((1 << CCK_SHRES_SHIFT) - 1), - hsyncendpos >> CCK_SHRES_SHIFT, hsyncendpos & ((1 << CCK_SHRES_SHIFT) - 1), - hsyncendpos >> CCK_SHRES_SHIFT, hsyncendpos &((1 << CCK_SHRES_SHIFT) - 1)); - write_log(_T(" Lines=%04X-%04X (%d-%d)\n"), - minfirstline, maxvpos_display + maxvpos_display_vsync, - minfirstline, maxvpos_display + maxvpos_display_vsync); - write_log(_T("PC=%08x COP=%08x\n"), M68K_GETPC, cop_state.ip); + return v; } -int current_maxvpos(void) +static void rtg_vsync (void) { - return maxvpos + (lof_store ? 1 : 0); +#ifdef PICASSO96 + frame_time_t start, end; + start = read_processor_time(); + picasso_handle_vsync(); + end = read_processor_time(); + frameskiptime += end - start; +#endif } +static void rtg_vsynccheck(void) +{ #if 0 -static void checklacecount(bool lace) -{ - if (!interlace_changed) { - if (nlace_cnt >= NLACE_CNT_NEEDED && lace) { - lof_togglecnt_lace = LOF_TOGGLES_NEEDED; - lof_togglecnt_nlace = 0; - //write_log (_T("immediate lace\n")); - nlace_cnt = 0; - } else if (nlace_cnt <= -NLACE_CNT_NEEDED && !lace) { - lof_togglecnt_nlace = LOF_TOGGLES_NEEDED; - lof_togglecnt_lace = 0; - //write_log (_T("immediate nlace\n")); - nlace_cnt = 0; - } - } - if (lace) { - if (nlace_cnt > 0) - nlace_cnt = 0; - nlace_cnt--; - if (nlace_cnt < -NLACE_CNT_NEEDED * 2) - nlace_cnt = -NLACE_CNT_NEEDED * 2; - } else if (!lace) { - if (nlace_cnt < 0) - nlace_cnt = 0; - nlace_cnt++; - if (nlace_cnt > NLACE_CNT_NEEDED * 2) - nlace_cnt = NLACE_CNT_NEEDED * 2; + if (vblank_found_rtg) { + vblank_found_rtg = false; + rtg_vsync(); } -} #endif +} + -static void set_hcenter(void) +static void maybe_process_pull_audio(void) { - hcenter_sync_v2 = (hcenter & 0xff) << CCK_SHRES_SHIFT; - if (!aga_mode && ecs_denise) { - if (beamcon0 & bemcon0_vsync_mask) { - hcenter_v2 = (hcenter & 0xff) << CCK_SHRES_SHIFT; - } else { - hcenter_v2 = 132 << CCK_SHRES_SHIFT; - } - uae_u16 hc = hcenter_v2; - hcenter_v2 -= 3; - if (hc >= (1 << CCK_SHRES_SHIFT) && hcenter_v2 < (1 << CCK_SHRES_SHIFT)) { - hcenter_v2 += maxhpos << CCK_SHRES_SHIFT; - } - hcenter_v2 = adjust_hr(hcenter_v2); - if (hcenter_v2 < (1 << CCK_SHRES_SHIFT)) { - hcenter_v2 = 0; - } - hcenter_v2_end = hcenter_v2; - hcenter_v2_end += ((beamcon0 & BEAMCON0_PAL) ? 8 : 9) << CCK_SHRES_SHIFT; - if (hcenter_v2_end >= maxhpos << CCK_SHRES_SHIFT) { - hcenter_v2_end -= maxhpos << CCK_SHRES_SHIFT; - } - hcenter_active = true; - } else { - if (beamcon0 & bemcon0_vsync_mask) { - hcenter_v2 = (hcenter & 0xff) << CCK_SHRES_SHIFT; - } else { - hcenter_v2 = 132 << CCK_SHRES_SHIFT; + audio_finish_pull(); +} + +static bool crender_screen(int monid, int mode, bool immediate) +{ + if (currprefs.gfx_vresolution && interlace_seen > 0 && currprefs.gfx_iscanlines == 0) { + // if non-fields interlace mode: render only every other frame + if (vsync_counter & 1) { + return true; } - hcenter_active = false; } + bool v = render_screen(monid, mode, immediate); + if (display_reset > 0) { + display_reset--; + } + return v; } -static void updateextblk(void) +// moving average algorithm +#define MAVG_MAX_SIZE 128 +struct mavg_data { - hsyncstartpos_start_hw = 13; - hsyncstartpos_hw = maxhpos_short + hsyncstartpos_start_hw; - hsyncendpos_hw = 24; + frame_time_t values[MAVG_MAX_SIZE]; + int size; + int offset; + frame_time_t mavg; +}; - hbstrt_v = (hbstrt & 0xff) << CCK_SHRES_SHIFT; - hbstop_v = (hbstop & 0xff) << CCK_SHRES_SHIFT; - // Agnus/Alice side HBxxxx, used by VARCSY - hbstrt_sync_v2 = hbstrt_v; - hbstop_sync_v2 = hbstop_v; +static void mavg_clear (struct mavg_data *md) +{ + md->size = 0; + md->offset = 0; + md->mavg = 0; +} - if (aga_mode) { - // AGA horizontal blanking is simple - hbstrt_v |= (hbstrt >> 8) & 7; - hbstop_v |= (hbstop >> 8) & 7; - // hblank has 1 lores pixel offset - hbstrt_v2 = hbstrt_v - 4; - if (hbstrt_v >= (1 << CCK_SHRES_SHIFT) && hbstrt_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstrt_v2 += maxhpos_short << CCK_SHRES_SHIFT; - } - hbstop_v2 = hbstop_v - 4; - if (hbstop_v >= (1 << CCK_SHRES_SHIFT) && hbstop_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstop_v2 += maxhpos_short << CCK_SHRES_SHIFT; - } - exthblank = (bplcon0 & 1) && (bplcon3 & 1); +static frame_time_t mavg(struct mavg_data *md, frame_time_t newval, int size) +{ + if (md->size < size) { + md->values[md->size++] = newval; + md->mavg += newval; } else { - // ECS Denise CSYNC horizontal blanking is complex - if (new_beamcon0 & BEAMCON0_VARCSYEN) { - // ECS Denise HBLANK uses CSYNC input and matches programmed HSYNC period. - hbstrt_v2 = (hsstrt & 0xff) << CCK_SHRES_SHIFT; - hbstop_v2 = (hsstop & 0xff) << CCK_SHRES_SHIFT; - } else if (new_beamcon0 & BEAMCON0_BLANKEN) { - // HBSTRT/HBSTOP blanking - hbstrt_v2 = hbstrt_v; - hbstop_v2 = hbstop_v; - } else { - // ECS Denise HBLANK uses CSYNC input and matches hardwired HSYNC period. - hbstrt_v2 = 18 << CCK_SHRES_SHIFT; - hbstop_v2 = 35 << CCK_SHRES_SHIFT; - } - if (new_beamcon0 & BEAMCON0_CSYTRUE) { - uae_u16 tmp = hbstrt_v2; - hbstrt_v2 = hbstop_v2; - hbstop_v2 = tmp; - } - hbstrt_v = hbstrt_v2; - hbstop_v = hbstop_v2; - // hblank has 1 lores pixel offset - hbstrt_v2 -= 4; - hbstop_v2 -= 4; - if (hbstrt_v >= (1 << CCK_SHRES_SHIFT) && hbstrt_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstrt_v2 += maxhpos_short << CCK_SHRES_SHIFT; - } - if (hbstop_v >= (1 << CCK_SHRES_SHIFT) && hbstop_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstop_v2 += maxhpos_short << CCK_SHRES_SHIFT; + md->mavg -= md->values[md->offset]; + md->values[md->offset] = newval; + md->mavg += newval; + md->offset++; + if (md->offset >= size) { + md->offset -= size; } - exthblank = (bplcon0 & 1) && (bplcon3 & 1); } + return md->mavg / md->size; +} - if (!exthblank) { - hbstrt_v2 = (8 << CCK_SHRES_SHIFT) - 3; - if (!ecs_denise) { - hbstrt_v2 -= 4; - } - hbstop_v2 = (47 << CCK_SHRES_SHIFT) - 7; - hbstrt_v2 = adjust_hr(hbstrt_v2); - hbstop_v2 = adjust_hr(hbstop_v2); - } +#define MAVG_VSYNC_SIZE 128 +#ifdef DEBUGGER +extern int log_vsync, debug_vsync_min_delay, debug_vsync_forced_delay; +#endif +static bool framewait(void) +{ + struct amigadisplay *ad = &adisplays[0]; + frame_time_t curr_time; + frame_time_t start; + int vs = isvsync_chipset(); + int status = 0; + + events_reset_syncline(); - hbstrt_reg = hbstrt_v2; - hbstop_reg = hbstop_v2; + static struct mavg_data ma_frameskipt; + frame_time_t frameskipt_avg = mavg(&ma_frameskipt, frameskiptime, MAVG_VSYNC_SIZE); - if ((new_beamcon0 & bemcon0_hsync_mask) && (!currprefs.monitoremu || currprefs.cs_hvcsync > 0)) { + frameskiptime = 0; - hsyncstartpos = hsstrt + 2; + if (vs > 0) { - if (hsyncstartpos >= maxhpos_short) { - hsyncstartpos -= maxhpos_short; + static struct mavg_data ma_legacy; + static frame_time_t vsync_time; + frame_time_t t; + + curr_time = read_processor_time(); + vsyncwaittime = vsyncmaxtime = curr_time + vsynctimebase; + if (!frame_rendered && !ad->picasso_on) { + frame_rendered = crender_screen(0, 1, false); } - hsyncendpos = hsstop; - hsstop_detect2 = (hsstrt + 21) * 2; - if (hsstop_detect2 >= maxhpos_short * 2) { - hsstop_detect2 -= maxhpos_short * 2; + start = read_processor_time(); + t = 0; + if (start - vsync_time >= 0 && start - vsync_time < vsynctimebase) { + t += start - vsync_time; } - hsyncstartpos_start = hsyncstartpos; - if (hsyncstartpos < maxhpos_short / 2) { - hsyncstartpos = maxhpos_short + hsyncstartpos_start; - denisehtotal = hsyncstartpos; - } else { - denisehtotal = maxhpos_short + hsyncstartpos; + if (!frame_shown) { + show_screen(0, 1); + if (currprefs.gfx_apmode[0].gfx_strobo) { + show_screen(0, 4); + } } - // make sure possible BPL DMA cycles before first refresh slot are processed before hsync - if (hsyncstartpos_start < REFRESH_FIRST_HPOS + 1) { - hsyncstartpos_start = REFRESH_FIRST_HPOS + 1; + + maybe_process_pull_audio(); + + frame_time_t legacy_avg = mavg(&ma_legacy, t, MAVG_VSYNC_SIZE); + if (t > legacy_avg) { + legacy_avg = t; } + t = legacy_avg; - hsstrt_v2 = (hsstrt & 0xff) << CCK_SHRES_SHIFT; - hsstop_v2 = (hsstop & 0xff) << CCK_SHRES_SHIFT; +#ifdef DEBUGGER + if (debug_vsync_min_delay && t < debug_vsync_min_delay * vsynctimebase / 100) { + t = debug_vsync_min_delay * vsynctimebase / 100; + } + if (debug_vsync_forced_delay > 0) { + t = debug_vsync_forced_delay * vsynctimebase / 100; + } +#endif - } else { + vsync_time = read_processor_time(); + if (t > vsynctimebase * 2 / 3) { + t = vsynctimebase * 2 / 3; + } - hsyncstartpos_start = hsyncstartpos_start_hw; - hsyncstartpos = hsyncstartpos_hw; - denisehtotal = maxhpos_short + 7; - hsstop_detect2 = (35 + 9) * 2; + if (currprefs.m68k_speed < 0) { + vsynctimeperline = (vsynctimebase - t) / (maxvpos_display + 1); + } else { + vsynctimeperline = (vsynctimebase - t) / 3; + } - hsstrt_v2 = 18 << CCK_SHRES_SHIFT; - hsstop_v2 = 35 << CCK_SHRES_SHIFT; - hsyncendpos = hsyncendpos_hw; + if (vsynctimeperline < 1) { + vsynctimeperline = 1; + } - } +#ifdef DEBUGGER + if (0 || (log_vsync & 2)) { + write_log (_T("%06d %06d/%06d %03d%%\n"), t, vsynctimeperline, vsynctimebase, t * 100 / vsynctimebase); + } +#endif - hsstrt_v2 = adjust_hr(hsstrt_v2); - hsstop_v2 = adjust_hr(hsstop_v2); + frame_shown = true; + return 1; + } else if (vs < 0) { - // Out of range left. Denise/Lisa hcounter starts from 2 (skips first 2 lores pixels) - if (hbstrt_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstrt_v2 = 0xffff; - } - if (hbstop_v2 < (1 << CCK_SHRES_SHIFT)) { - hbstop_v2 = 0xffff; - } - // Out of range right - if (hbstrt_v2 >= (maxhpos_short << CCK_SHRES_SHIFT) + (1 << CCK_SHRES_SHIFT)) { - hbstrt_v2 = 0xffff; - } - if (hbstop_v2 >= (maxhpos_short << CCK_SHRES_SHIFT) + (1 << CCK_SHRES_SHIFT)) { - hbstop_v2 = 0xffff; - } - // hsync start offset adjustment - if (hbstrt_v2 <= (hsyncstartpos_start << CCK_SHRES_SHIFT)) { - hbstrt_v2 += maxhpos_short << CCK_SHRES_SHIFT; - if (hbstrt_v2 > (maxhpos_short + hsyncstartpos_start_cycles) << CCK_SHRES_SHIFT) { - hbstrt_v2 = 1 << CCK_SHRES_SHIFT; - } - } - if (hbstop_v2 <= (hsyncstartpos_start << CCK_SHRES_SHIFT)) { - hbstop_v2 += maxhpos_short << CCK_SHRES_SHIFT; - if (hbstop_v2 > (maxhpos_short + hsyncstartpos_start_cycles) << CCK_SHRES_SHIFT) { - hbstop_v2 = 1 << CCK_SHRES_SHIFT; + if (!vblank_hz_state) { + return status != 0; } - } - int strt = hbstrt_v2; - int stop = hbstop_v2; - hbstrt_v2 = adjust_hr(hbstrt_v2); - hbstop_v2 = adjust_hr(hbstop_v2); - // if same after rounding: increase start/stop by minimum unit - if (hbstrt_v2 == hbstop_v2) { - int add = currprefs.chipset_hr ? (1 << currprefs.gfx_resolution) : 4; - if (strt < stop) { - hbstop_v2 += add; - if (hbstop_v2 >= (maxhpos_short << CCK_SHRES_SHIFT) + (1 << CCK_SHRES_SHIFT)) { - hbstop_v2 = 0; - } - } else if (strt > stop) { - hbstrt_v2 += add; - if (hbstrt_v2 >= (maxhpos_short << CCK_SHRES_SHIFT) + (1 << CCK_SHRES_SHIFT)) { - hbstrt_v2 = 0; - } - } + frame_shown = true; + status = 1; + return status != 0; } - hsyncstartpos_start_hw <<= CCK_SHRES_SHIFT; - hsyncstartpos_hw <<= CCK_SHRES_SHIFT; - hsyncendpos_hw <<= CCK_SHRES_SHIFT; + status = 1; - hsyncstartpos_start_cycles = hsyncstartpos_start; + int clockadjust = 0; + frame_time_t vstb = vsynctimebase; - hsyncstartpos_start <<= CCK_SHRES_SHIFT; - hsyncstartpos <<= CCK_SHRES_SHIFT; - hsyncendpos <<= CCK_SHRES_SHIFT; + if (currprefs.m68k_speed < 0 && !cpu_sleepmode && !currprefs.cpu_memory_cycle_exact) { - denisehtotal <<= CCK_SHRES_SHIFT; + if (!frame_rendered && !ad->picasso_on) + frame_rendered = crender_screen(0, 1, false); - // ECS Denise has 1 extra lores pixel in right border - if (ecs_denise) { - denisehtotal += 1 << (CCK_SHRES_SHIFT - 1); - } + if (currprefs.m68k_speed_throttle) { + // this delay can safely overshoot frame time by 1-2 ms, following code will compensate for it. + for (;;) { + curr_time = read_processor_time(); + if (vsyncwaittime - curr_time <= 0 || vsyncwaittime - curr_time > 2 * vsynctimebase) { + break; + } + rtg_vsynccheck (); + if (cpu_sleep_millis(1) < 0) { + curr_time = read_processor_time(); + break; + } + } + } else { + curr_time = read_processor_time(); + } - set_hcenter(); + int max; + frame_time_t adjust = 0; + if (curr_time - vsyncwaittime > 0 && curr_time - vsyncwaittime < vstb / 2) { + adjust += curr_time - vsyncwaittime; + } + adjust += clockadjust; + max = (int)(vstb * (1000.0 + currprefs.m68k_speed_throttle) / 1000.0 - adjust); + vsyncwaittime = curr_time + vstb - adjust; + vsyncmintime = curr_time; - calcdiw(); -} + if (max < 0) { + max = 0; + vsynctimeperline = 1; + } else { + vsynctimeperline = max / (maxvpos_display + 1); + } + vsyncmaxtime = curr_time + max; -struct chipset_refresh *get_chipset_refresh(struct uae_prefs *p) -{ - struct amigadisplay *ad = &adisplays[0]; - int islace = interlace_seen ? 1 : 0; - int isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; - int custom = programmedmode == 1 ? 1 : 0; + if (0) + write_log (_T("%06d:%06d/%06d %d %d\n"), adjust, vsynctimeperline, vstb, max, maxvpos_display); + + } else { - if (!ecs_agnus) { - isntsc = currprefs.ntscmode ? 1 : 0; - } + frame_time_t t = 0; - int def = -1; - for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { - struct chipset_refresh *cr = &p->cr[i]; - if (cr->defaultdata) - def = i; - if (cr->inuse) { - if ((cr->horiz < 0 || cr->horiz == maxhpos) && - (cr->vert < 0 || cr->vert == maxvpos_display) && - (cr->ntsc < 0 || (cr->ntsc == 1 && isntsc && !custom) || (cr->ntsc == 0 && !isntsc && !custom) || (cr->ntsc == 2 && custom)) && - (cr->lace < 0 || (cr->lace > 0 && islace) || (cr->lace == 0 && !islace)) && - (cr->resolution == 0 || cr->resolution == 7 || (cr->resolution & (1 << detected_screen_resolution))) && - (cr->framelength < 0 || (cr->framelength > 0 && lof_store) || (cr->framelength == 0 && !lof_store) || (cr->framelength >= 0 && islace)) && - ((cr->rtg && ad->picasso_on) || (!cr->rtg && !ad->picasso_on)) && - (cr->vsync < 0 || (cr->vsync > 0 && isvsync_chipset ()) || (cr->vsync == 0 && !isvsync_chipset ()))) - return cr; + start = read_processor_time(); + if (!frame_rendered && !ad->picasso_on) { + frame_rendered = crender_screen(0, 1, false); + t = read_processor_time() - start; + } + if (!currprefs.cpu_thread) { + while (!currprefs.turbo_emulation) { + float v = rpt_vsync(clockadjust) / (syncbase / 1000.0f); + if (v >= -FRAMEWAIT_MIN_MS) + break; + rtg_vsynccheck(); + maybe_process_pull_audio(); + if (cpu_sleep_millis(1) < 0) + break; + } + while (rpt_vsync(clockadjust) < 0) { + rtg_vsynccheck(); + if (audio_is_pull_event()) { + maybe_process_pull_audio(); + break; + } + } + } + evt_t tnow = read_processor_time(); + idletime += tnow - start; + curr_time = tnow; + vsyncmintime = curr_time; + vsyncmaxtime = vsyncwaittime = curr_time + vstb; + if (frame_rendered) { + show_screen(0, 0); + t += read_processor_time() - curr_time; } + t += frameskipt_avg; + + vsynctimeperline = (vstb - t) / FRAMEWAIT_SPLIT; + if (vsynctimeperline < 1) { + vsynctimeperline = 1; + } else if (vsynctimeperline > vstb / FRAMEWAIT_SPLIT) { + vsynctimeperline = vstb / FRAMEWAIT_SPLIT; + } + + frame_shown = true; + } - if (def >= 0) { - return &p->cr[def]; + return status != 0; +} + +static void reset_cpu_idle(void) +{ + cpu_sleepmode_cnt = 0; + if (cpu_sleepmode) { + cpu_sleepmode = 0; + //write_log(_T("woken\n")); } - return NULL; } -static bool changed_chipset_refresh(void) +#define FPSCOUNTER_MAVG_SIZE 10 +static struct mavg_data fps_mavg, idle_mavg; + +void fpscounter_reset(void) { - return stored_chipset_refresh != get_chipset_refresh(&currprefs); + mavg_clear(&fps_mavg); + mavg_clear(&idle_mavg); + bogusframe = 2; + lastframetime = read_processor_time(); + idletime = 0; } -void compute_framesync(void) +static void fpscounter(bool frameok) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - struct amigadisplay *ad = &adisplays[0]; - int islace = interlace_seen ? 1 : 0; - int isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; - bool found = false; + frame_time_t now, last; - if (islace) { - vblank_hz = vblank_hz_lace; - } else if (lof_store) { - vblank_hz = vblank_hz_lof; - } else { - vblank_hz = vblank_hz_shf; + now = read_processor_time(); + last = now - lastframetime; + lastframetime = now; + + if (bogusframe || last < 0) { + return; } - vblank_hz = target_adjust_vblank_hz(0, vblank_hz); + mavg(&fps_mavg, last / 10, FPSCOUNTER_MAVG_SIZE); + mavg(&idle_mavg, idletime / 10, FPSCOUNTER_MAVG_SIZE); + idletime = 0; - struct chipset_refresh *cr = get_chipset_refresh(&currprefs); - while (cr) { - float v = -1; - if (!ad->picasso_on && !ad->picasso_requested_on) { - if (isvsync_chipset ()) { - if (!currprefs.gfx_variable_sync) { - if (cr->index == CHIPSET_REFRESH_PAL || cr->index == CHIPSET_REFRESH_NTSC) { - if ((fabs(vblank_hz - 50.0f) < 1 || fabs(vblank_hz - 60.0f) < 1 || fabs(vblank_hz - 100.0) < 1 || fabs(vblank_hz - 120.0f) < 1) && currprefs.gfx_apmode[0].gfx_vsync == 2 && currprefs.gfx_apmode[0].gfx_fullscreen > 0) { - vsync_switchmode(0, (int)vblank_hz); - } - } - if (isvsync_chipset() < 0) { + frametime += last; + timeframes++; - float v2; - v2 = target_getcurrentvblankrate(0); - if (!cr->locked) - v = v2; - } else if (isvsync_chipset() > 0) { - if (currprefs.gfx_apmode[0].gfx_refreshrate) { - v = (float)abs(currprefs.gfx_apmode[0].gfx_refreshrate); - } - } - } - } else { - if (cr->locked == false) { - changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; - cfgfile_parse_lines (&changed_prefs, cr->commands, -1); - if (cr->commands[0]) { - write_log(_T("CMD1: '%s'\n"), cr->commands); - } - break; - } else { - v = cr->rate; - } - } - if (v < 0) - v = cr->rate; - if (v > 0) { - changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; - cfgfile_parse_lines (&changed_prefs, cr->commands, -1); - if (cr->commands[0]) { - write_log(_T("CMD2: '%s'\n"), cr->commands); - } - } + if ((timeframes & 7) == 0) { + double idle = 1000 - (idle_mavg.mavg == 0 ? 0.0 : (double)idle_mavg.mavg * 1000.0 / vsynctimebase); + int fps = fps_mavg.mavg == 0 ? 0 : (int)(syncbase * 10 / fps_mavg.mavg); + if (fps > 99999) + fps = 99999; + if (idle < 0) + idle = 0; + if (idle > 100 * 10) + idle = 100 * 10; + if (fake_vblank_hz * 10 > fps) { + double mult = (double)fake_vblank_hz * 10.0 / fps; + idle *= mult; + } + if (currprefs.turbo_emulation && idle < 100 * 10) + idle = 100 * 10; + gui_data.fps = fps; + gui_data.lace = interlace_seen != 0; + if (!interlace_seen) { + gui_data.lines = linear_vpos_prev[0]; } else { - if (cr->locked == false) - v = vblank_hz; - else - v = cr->rate; - changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; - cfgfile_parse_lines (&changed_prefs, cr->commands, -1); - if (cr->commands[0]) { - write_log(_T("CMD3: '%s'\n"), cr->commands); - } + gui_data.lines = linear_vpos_prev[0] + linear_vpos_prev[1]; + } + gui_data.idle = (int)idle; + gui_data.fps_color = nosignal_status == 1 ? 2 : (nosignal_status == 2 ? 3 : (frameok ? 0 : 1)); + if ((timeframes & 15) == 0) { + gui_fps(fps, gui_data.lines, gui_data.lace, (int)idle, gui_data.fps_color); } - found = true; - break; - } - if (!found) { - changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; } - stored_chipset_refresh = cr; - interlace_changed = 0; - lof_togglecnt_lace = 0; - lof_togglecnt_nlace = 0; - //nlace_cnt = NLACE_CNT_NEEDED; - lof_changing = 0; - vidinfo->drawbuffer.inxoffset = -1; - vidinfo->drawbuffer.inyoffset = -1; - updateextblk(); - - hsync_end_left_border = hsstop_detect; +} - int res = GET_RES_AGNUS(bplcon0); - int eres = 0; - - int res2 = currprefs.gfx_resolution; +// vsync functions that are not hardware timing related +// called when vsync starts which is not necessarily last line +// it can line 0 or even later. +static void vsync_handler_render(void) +{ + struct amigadisplay *ad = &adisplays[0]; - if (doublescan > 0) { - res2++; - eres++; - } - if (res2 > RES_MAX) { - res2 = RES_MAX; - eres--; +#if 1 + if (currprefs.m68k_speed < 0) { + if (regs.stopped) { + if (cpu_last_stop_vpos >= 0) { + cpu_stopped_lines += maxvpos - cpu_last_stop_vpos; + } else { + cpu_stopped_lines = 0; + } + } + int mv = 12 - currprefs.cpu_idle / 15; + if (mv >= 1 && mv <= 11) { + mv = 11 - mv; + if (cpu_stopped_lines >= maxvpos * (mv * 10) / 100) { + cpu_sleepmode_cnt++; + if (cpu_sleepmode_cnt >= 50) { + cpu_sleepmode_cnt = 50; + if (!cpu_sleepmode) { + cpu_sleepmode = 1; + //write_log(_T("sleep\n")); + } + } + } else { + reset_cpu_idle(); + } + } else { + reset_cpu_idle(); + } } - - hsync_end_left_border <<= eres; - - int vres2 = currprefs.gfx_vresolution; - if (doublescan > 0 && !islace) { - vres2--; + if (regs.halted < 0) { + reset_cpu_idle(); } + cpu_last_stop_vpos = 0; + cpu_stopped_lines = 0; +#endif - if (vres2 < 0) { - vres2 = 0; - } - if (vres2 > VRES_QUAD) { - vres2 = VRES_QUAD; +#ifdef PICASSO96 + if (isvsync_rtg() >= 0) { + rtg_vsync(); } +#endif - vidinfo->drawbuffer.inwidth = maxhpos_display << res2; - vidinfo->drawbuffer.inwidth2 = vidinfo->drawbuffer.inwidth; - vidinfo->drawbuffer.extrawidth = -2; - if (currprefs.gfx_extrawidth > 0) { - vidinfo->drawbuffer.extrawidth = currprefs.gfx_extrawidth << res2; - } - vidinfo->drawbuffer.extraheight = -2; - if (currprefs.gfx_extraheight > 0) { - vidinfo->drawbuffer.extraheight = currprefs.gfx_extraheight << vres2; - } - if (vidinfo->drawbuffer.extrawidth == -2 && ((new_beamcon0 & (BEAMCON0_VARVBEN | bemcon0_vsync_mask)) || currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME)) { - vidinfo->drawbuffer.extrawidth = -1; + if (!vsync_rendered) { + frame_time_t start, end; + start = read_processor_time(); + vsync_handle_redraw(lof_store, lof_changed, bplcon0, bplcon3, isvsync_chipset() >= 0, initial_frame); + initial_frame = false; + vsync_rendered = true; + end = read_processor_time(); + frameskiptime += end - start; } - vidinfo->drawbuffer.inheight = maxvsize_display << vres2; - vidinfo->drawbuffer.inheight2 = vidinfo->drawbuffer.inheight; - vidinfo->drawbuffer.inxoffset = 0; - - //write_log(_T("Width %d Height %d\n"), vidinfo->drawbuffer.inwidth, vidinfo->drawbuffer.inheight); - - if (vidinfo->drawbuffer.inwidth < 16) - vidinfo->drawbuffer.inwidth = 16; - if (vidinfo->drawbuffer.inwidth2 < 16) - vidinfo->drawbuffer.inwidth2 = 16; - if (vidinfo->drawbuffer.inheight < 1) - vidinfo->drawbuffer.inheight = 1; - if (vidinfo->drawbuffer.inheight2 < 1) - vidinfo->drawbuffer.inheight2 = 1; - if (vidinfo->drawbuffer.inwidth > vidinfo->drawbuffer.width_allocated) - vidinfo->drawbuffer.inwidth = vidinfo->drawbuffer.width_allocated; - if (vidinfo->drawbuffer.inwidth2 > vidinfo->drawbuffer.width_allocated) - vidinfo->drawbuffer.inwidth2 = vidinfo->drawbuffer.width_allocated; + //linear_vpos = vpos; + //next_lineno = calculate_lineno(linear_vpos); - if (vidinfo->drawbuffer.inheight > vidinfo->drawbuffer.height_allocated) - vidinfo->drawbuffer.inheight = vidinfo->drawbuffer.height_allocated; - if (vidinfo->drawbuffer.inheight2 > vidinfo->drawbuffer.height_allocated) - vidinfo->drawbuffer.inheight2 = vidinfo->drawbuffer.height_allocated; + bool frameok = framewait(); + + if (!ad->picasso_on) { + if (!frame_rendered && vblank_hz_state) { + frame_rendered = crender_screen(0, 1, false); + } + if (frame_rendered && !frame_shown) { + frame_shown = show_screen_maybe(0, isvsync_chipset () >= 0); + } + } - vidinfo->drawbuffer.outwidth = vidinfo->drawbuffer.inwidth; - vidinfo->drawbuffer.outheight = vidinfo->drawbuffer.inheight; + fpscounter(frameok); - if (vidinfo->drawbuffer.outwidth > vidinfo->drawbuffer.width_allocated) - vidinfo->drawbuffer.outwidth = vidinfo->drawbuffer.width_allocated; + bool waspaused = false; + while (handle_events()) { + if (!waspaused) { + if (crender_screen(0, 1, true)) { + show_screen(0, 0); + } + waspaused = true; + } + // we are paused, do all config checks but don't do any emulation + if (vsync_handle_check()) { + redraw_frame(); + if (crender_screen(0, 1, true)) { + show_screen(0, 0); + } + } + config_check_vsync(); + } - if (vidinfo->drawbuffer.outheight > vidinfo->drawbuffer.height_allocated) - vidinfo->drawbuffer.outheight = vidinfo->drawbuffer.height_allocated; + vsync_rendered = false; + frame_shown = false; + frame_rendered = false; - memset(line_decisions, 0, sizeof(line_decisions)); - memset(line_drawinfo, 0, sizeof(line_drawinfo)); - for (int i = 0; i < sizeof(line_decisions) / sizeof(*line_decisions); i++) { - line_decisions[i].plfleft = -2; + if (quit_program > 0) { + /* prevent possible infinite loop at wait_cycles().. */ + ad->framecnt = 0; + //reset_decisions_scanline_start(); + //reset_decisions_hsync_start(); + return; } - check_nocustom(); + if (vblank_hz_mult > 0) { + vblank_hz_state ^= 1; + } else { + vblank_hz_state = 1; + } - compute_vsynctime(); + nextline_how = nln_normal; - hblank_hz = (currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL) / (maxhpos + (linetoggle ? 0.5f : 0.0f)); + //checklacecount (bplcon0_interlace_seen || lof_lace); +} - write_log(_T("%s mode%s%s V=%.4fHz H=%0.4fHz (%dx%d+%d) IDX=%d (%s) D=%d RTG=%d/%d\n"), - isntsc ? _T("NTSC") : _T("PAL"), - islace ? _T(" lace") : (lof_lace ? _T(" loflace") : _T("")), - doublescan > 0 ? _T(" dblscan") : _T(""), - vblank_hz, - hblank_hz, - maxhpos, maxvpos, lof_store ? 1 : 0, - cr ? cr->index : -1, - cr != NULL && cr->label != NULL ? cr->label : _T(""), - currprefs.gfx_apmode[ad->picasso_on ? 1 : 0].gfx_display, ad->picasso_on, ad->picasso_requested_on - ); +static bool vsync_display_rendered; - set_config_changed(); +static void vsync_display_render(void) +{ + if (!vsync_display_rendered) { + vsyncmintimepre = read_processor_time(); + vsync_handler_render(); + vsync_display_rendered = true; + } +} - if (currprefs.monitoremu_mon != 0) { - target_graphics_buffer_update(currprefs.monitoremu_mon, false); +static void vsync_check_vsyncmode(void) +{ + if (linear_vpos_prev[2] == linear_vpos_prev[0] || linear_vpos_prev[1] == linear_vpos_prev[0]) { + if (linear_hpos_prev[2] == linear_hpos_prev[0] || linear_hpos_prev[1] == linear_hpos_prev[0]) { + if (linear_hpos_prev[2] == linear_hpos_prev[0] || linear_hpos_prev[1] == linear_hpos_prev[0]) { + if (linear_hpos_prev[2] == linear_hpos_prev[0] || linear_hpos_prev[1] == linear_hpos_prev[0]) { + int hp = linear_hpos_prev[0] > linear_hpos_prev[2] ? linear_hpos_prev[0] : linear_hpos_prev[2]; + int vp = linear_vpos_prev[0] > linear_vpos_prev[2] ? linear_vpos_prev[0] : linear_vpos_prev[2]; + if (abs(hp - current_linear_hpos) > 1 || abs(vp - current_linear_vpos) > 1) { + current_linear_hpos = hp; + current_linear_vpos = vp; + init_beamcon0(); + compute_framesync(); + devices_syncchange(); + } + } + } + } } - if (target_graphics_buffer_update(0, false)) { - reset_drawing(); + + if (varsync_changed > 0) { + varsync_changed--; + if (varsync_changed == 0) { + dumpsync(); + } } } -/* set PAL/NTSC or custom timing variables */ -static void init_beamcon0(bool fakehz) +static void check_display_mode_change(void) { - int isntsc, islace; - int hpos = current_hpos(); - int oldmaxhpos = maxhpos; - - beamcon0 = new_beamcon0; + struct amigadisplay *ad = &adisplays[0]; + int vt, ht, hs, vs; - isntsc = (beamcon0 & BEAMCON0_PAL) ? 0 : 1; - islace = (interlace_seen) ? 1 : 0; - if (!ecs_agnus) { - isntsc = currprefs.ntscmode ? 1 : 0; + if (new_beamcon0 & BEAMCON0_VARBEAMEN) { + vt = vtotal; + ht = htotal; + } else { + vt = maxvpos; + ht = maxhpos; } - - if (currprefs.cs_hvcsync == 0) { - bemcon0_hsync_mask = BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN; - bemcon0_vsync_mask = BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN; - } else if (currprefs.cs_hvcsync == 1) { - bemcon0_hsync_mask = BEAMCON0_VARCSYEN; - bemcon0_vsync_mask = BEAMCON0_VARCSYEN; + if (new_beamcon0 & (BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN)) { + hs = hsstrt; } else { - bemcon0_hsync_mask = BEAMCON0_VARHSYEN; - bemcon0_vsync_mask = BEAMCON0_VARVSYEN; + hs = 18; } - - float clk = (float)(currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL); - int hardwired_vsstrt = 0; - if (!isntsc) { - maxvpos = MAXVPOS_PAL; - maxhpos = MAXHPOS_PAL; - minfirstline = VBLANK_ENDLINE_PAL; - vblank_hz_nom = vblank_hz = VBLANK_HZ_PAL; - hardwired_vbstop = VBLANK_STOP_PAL; - hardwired_vbstrt = maxvpos; - equ_vblank_endline = EQU_ENDLINE_PAL; - equ_vblank_toggle = true; - vblank_hz_shf = clk / ((maxvpos + 0.0f) * maxhpos); - vblank_hz_lof = clk / ((maxvpos + 1.0f) * maxhpos); - vblank_hz_lace = clk / ((maxvpos + 0.5f) * maxhpos); + if (new_beamcon0 & (BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) { + vs = vsstrt; } else { - maxvpos = MAXVPOS_NTSC; - maxhpos = MAXHPOS_NTSC; - minfirstline = VBLANK_ENDLINE_NTSC; - vblank_hz_nom = vblank_hz = VBLANK_HZ_NTSC; - hardwired_vbstop = VBLANK_STOP_NTSC; - hardwired_vbstrt = maxvpos; - equ_vblank_endline = EQU_ENDLINE_NTSC; - equ_vblank_toggle = false; - float half = (beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f; - vblank_hz_shf = clk / ((maxvpos + 0.0f) * (maxhpos + half)); - vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); - vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); + vs = (new_beamcon0 & BEAMCON0_PAL) ? 2 : 3; } - dmal_htotal_mask = 0xffff; - if (beamcon0 & BEAMCON0_VARBEAMEN) { - // programmable scanrates (ECS Agnus) - if (vtotal >= MAXVPOS) { - vtotal = MAXVPOS - 1; - } - maxvpos = vtotal + 1; - if (htotal >= MAXHPOS) { - htotal = MAXHPOS - 1; - } - maxhpos = htotal + 1; - - if (maxhpos < DMAL_FIRST_HPOS) { - dmal_htotal_mask = 0; - } else if (maxhpos < DMAL_FIRST_HPOS + 6 * 2) { - int cnt = (maxhpos - DMAL_FIRST_HPOS) / 2; - dmal_htotal_mask = (1 << cnt) - 1; + // recalculate display if vtotal, htotal, hsync start or vsync start changed > 1 + if ((abs(vt - vt_old) > 1 || abs(ht - ht_old) > 1 || abs(hs - hs_old) > 1 || abs(vs - vs_old) > 1) && vt_old && ht_old) { + varsync_changed = 1; + if (!ad->picasso_on) { + nosignal_trigger = true; + display_reset = 2; } } - // after vsync, it seems earlier possible visible line is vsync+3. - int vsync_startline = 3; - if ((beamcon0 & BEAMCON0_VARVBEN) && (beamcon0 & bemcon0_vsync_mask)) { - vsync_startline += vsstrt; - if (vsync_startline >= maxvpos / 2) { - vsync_startline = 3; - } + vt_old = vt; + ht_old = ht; + vs_old = vs; + hs_old = hs; +} + +static void check_interlace(void) +{ + int is = interlace_seen; + int nis = 0; + bool ld = lof_display != 0; + + if (prevlofs[0] == prevlofs[2] && prevlofs[1] == ld && lof_display != prevlofs[0]) { + is = 1; + } else if (prevlofs[2] != lof_display && prevlofs[1] == lof_display && prevlofs[0] == ld) { + nis = 1; + } else { + is = 0; } - maxvpos_nom = maxvpos; - maxvpos_display = maxvpos; - maxvpos_display_vsync = 1; - if (agnusa1000) { - // A1000 Agnus VBSTRT=first line, OCS and later: VBSTRT=last line - maxvpos_display_vsync++; - hardwired_vsstrt++; - } else if (!ecs_agnus && !ecs_denise) { - // OCS Agnus + OCS Denise: line 0 is visible - maxvpos_display_vsync++; + if (is != interlace_seen) { + interlace_seen = is; + init_hz(); + } else if (nis) { + interlace_seen = 0; + init_hz(); } - vblank_firstline_hw = minfirstline; + prevlofs[2] = prevlofs[1]; + prevlofs[1] = prevlofs[0]; + prevlofs[0] = lof_display; +} - // calculate max possible display width in lores pixels +static void check_no_signal(void) +{ + evt_t c = get_cycles(); + if (issyncstopped(bplcon0)) { + nosignal_trigger = true; + } + // Missing vsync + if (c > display_last_vsync + (CHIPSET_CLOCK_PAL / 10) * CYCLE_UNIT) { + nosignal_trigger = true; + } + // Missing hsync + if (c > display_last_hsync + (CHIPSET_CLOCK_PAL / 100) * CYCLE_UNIT) { + nosignal_trigger = true; + } + // Inverted CSYNC + if ((beamcon0 & BEAMCON0_CSYTRUE) && currprefs.cs_hvcsync == 1) { + nosignal_trigger = true; + } + // BLANKEN set: horizontal blanking is merged with CSYNC + if ((beamcon0 & BEAMCON0_BLANKEN) && currprefs.cs_hvcsync == 1) { + nosignal_trigger = true; + } + if ((beamcon0 & BEAMCON0_CSCBEN) && currprefs.cs_hvcsync == 2) { + nosignal_trigger = true; + } if (beamcon0 & BEAMCON0_VARBEAMEN) { - // assume VGA-like monitor if VARBEAMEN - if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - maxhpos_display = maxhpos + 7; - hsstop_detect = hsstrt * 2; - if (hsstop_detect > maxhpos / 2 * 2 || hsstop_detect < 4 * 2) { - hsstop_detect = 4 * 2; - } - minfirstline = 0; - } else { - int hp2 = maxhpos * 2; - if (exthblank) { - - int hb = 1; - int hbstrtx = (hbstrt & 0xff) * 2; - int hbstopx = (hbstop & 0xff) * 2; - if (aga_mode) { - hbstrtx |= (hbstrt & 0x400) ? 1 : 0; - hbstopx |= (hbstop & 0x400) ? 1 : 0; - } - if (hbstrtx > hp2) { - hbstrtx = hp2; - } - if (hbstopx > hp2) { - hbstopx = hp2; - } - if (hbstrtx > hp2 / 2 && hbstopx < hp2 / 2) { - hb = (hp2 - hbstrtx) + hbstopx; - } else if (hbstopx < hp2 / 2 && hbstrtx < hbstopx) { - hb = hbstopx - hbstrtx; - } - if (hbstopx > hp2 / 2) { - hbstopx = 0; - } - if (hb < 1) { - hb = 1; - } - -#if 0 - // HSYNC adjustment - int hsz = 0; - if (hsstrt > maxhpos / 2 && hsstop > hsstrt) { - hsz = hsstop - hsstrt; - } else if (hsstrt > maxhpos / 2 && hsstop < maxhpos / 2) { - hsz = (maxhpos - hsstrt) - hsstop; - } else if (hsstop < maxhpos / 2 && hsstrt < hsstop) { - hsz = hsstop - hsstrt; - } -#endif - maxhpos_display = maxhpos - ((hb + 1) / 2); - hsstop_detect = hbstopx - 1; - - } else { - - // hardwired - int hbstrtx = 7 * 2; - int hbstopx = 46 * 2; - int hb = hbstopx - hbstrtx; - maxhpos_display = maxhpos - (hb / 2); - hsstop_detect = 46 * 2 - 2; - } - - if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME) { - int diff = (maxhpos - 2) - maxhpos_display; - if (diff > 0) { - hsstop_detect -= (diff / 2) * 2; - } - maxhpos_display = maxhpos - 2; - maxvpos_display_vsync += 2; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { - maxhpos_display += EXTRAWIDTH_BROADCAST; - hsstop_detect--; - maxvpos_display_vsync++; - } - + if (htotal < 50 || htotal > 250) { + nosignal_trigger = true; } - maxhpos_display *= 2; - - } else { - - maxhpos_display = AMIGA_WIDTH_MAX; - hsstop_detect = hsstop_detect2; - - if (beamcon0 & bemcon0_hsync_mask) { - if (currprefs.gfx_overscanmode < OVERSCANMODE_BROADCAST) { - hsstop_detect += 7; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { - hsstop_detect += 5; - } else if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - maxhpos_display += EXTRAWIDTH_ULTRA; - maxvpos_display_vsync += vsync_startline; - minfirstline = 0; - hsstop_detect = hsyncstartpos_start_cycles * 2 - 4; - } - } else { - - if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - maxhpos_display += EXTRAWIDTH_ULTRA; - maxvpos_display_vsync += vsync_startline; - hsstop_detect = 18 * 2; - minfirstline = 1; - } + if (vtotal < 100 || vtotal > 1000) { + nosignal_trigger = true; } - - if (currprefs.gfx_overscanmode < OVERSCANMODE_BROADCAST) { - // one pixel row missing from right border if OCS - if (!ecs_denise) { - maxhpos_display--; - } - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_EXTREME) { - maxhpos_display += EXTRAWIDTH_EXTREME; - maxvpos_display_vsync += 2; - hsstop_detect -= 4; - minfirstline--; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { - maxhpos_display += EXTRAWIDTH_BROADCAST; - maxvpos_display_vsync++; - minfirstline--; - hsstop_detect -= 1; + // CSY output is invalid (no vsync part included) if HTOTAL is too small + hardwired CSYNC. + int csyh = (beamcon0 & 0x20) ? 0x8c : 0x8d; + if (htotal < csyh && !(beamcon0 & BEAMCON0_VARCSYEN) && currprefs.cs_hvcsync == 1) { + nosignal_trigger = true; } } +} - if (currprefs.gfx_extrawidth > 0) { - maxhpos_display += currprefs.gfx_extrawidth; - } +// emulated hardware vsync +static void vsync_handler_post(void) +{ + int monid = 0; + static frame_time_t prevtime; - if (hsstop_detect < 0) { - hsstop_detect = 0; - } - if (minfirstline < 0) { - minfirstline = 0; - } + //write_log (_T("%d %d %d\n"), vsynctimebase, read_processor_time () - vsyncmintime, read_processor_time () - prevtime); + prevtime = read_processor_time(); - vblank_extraline = !agnusa1000 && !ecs_denise ? 1 : 0; + check_nocustom(); - int minfirstline_hw = minfirstline; - if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - minfirstline = 0; - minfirstline_hw = 0; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_EXTREME) { - minfirstline_hw -= EXTRAHEIGHT_EXTREME / 2; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { - minfirstline_hw -= EXTRAHEIGHT_BROADCAST_TOP; +#if CUSTOM_DEBUG > 1 + if ((intreq & 0x0020) && (intena & 0x0020)) + write_log(_T("vblank interrupt not cleared\n")); +#endif + DISK_vsync (); + +#ifdef WITH_LUA + uae_lua_run_handler("on_uae_vsync"); +#endif + +#if 0 + if (bplcon0 & 4) { + lof_store = lof_store ? 0 : 1; } - if (beamcon0 & BEAMCON0_VARBEAMEN) { - minfirstline_hw = 0; + if ((bplcon0 & 2) && currprefs.genlock) { + genlockvtoggle = lof_store ? 1 : 0; } +#endif - if (fakehz && vpos_count > maxvpos_display_vsync) { - // we come here if vpos_count != maxvpos and beamcon0 didn't change - // (someone poked VPOSW) - if (vpos_count < 10) { - vpos_count = 10; - } - vblank_hz = (isntsc ? 15734.0f : 15625.0f) / vpos_count; - vblank_hz_nom = vblank_hz_shf = vblank_hz_lof = vblank_hz_lace = (float)vblank_hz; - maxvpos_nom = vpos_count - (lof_store ? 1 : 0); - if ((maxvpos_nom >= 256 && maxvpos_nom <= 313) || (beamcon0 & BEAMCON0_VARBEAMEN)) { - maxvpos_display = maxvpos_nom; - } else if (maxvpos_nom < 256) { - maxvpos_display = 255; - } else { - maxvpos_display = 313; - } - reset_drawing(); - } else if (vpos_count == 0) { - // mode reset - vpos_count = maxvpos; - vpos_count_diff = maxvpos; - } + check_no_signal(); - if ((beamcon0 & BEAMCON0_VARVBEN) && (beamcon0 & bemcon0_vsync_mask)) { - minfirstline = vsync_startline; - if (minfirstline > maxvpos / 2) { - minfirstline = vsync_startline; - } - minfirstline++; - firstblankedline = vbstrt; - if (vsstrt > 0 && vsstrt < maxvpos / 2) { - maxvpos_display_vsync += vsstrt - 1; - } - // if (weird mode where) vblank starts after vsync start+3: minfirstline = vsstrt+3 - if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME && firstblankedline >= vsstrt + 3 && minfirstline > vsstrt + 3 && firstblankedline < minfirstline) { - minfirstline = vsstrt + 3; - if (minfirstline_hw > minfirstline) { - minfirstline_hw = minfirstline; - } - } - } else if (beamcon0 & bemcon0_vsync_mask) { - firstblankedline = maxvpos + 1; - } else if (beamcon0 & BEAMCON0_VARVBEN) { - if (minfirstline > vbstop) { - minfirstline = vbstop; - if (minfirstline < 3) { - minfirstline = 3; - } - } - firstblankedline = vbstrt; - // if (weird mode where) vblank starts after vsync start+3: minfirstline = vsstrt+3 - if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME && firstblankedline >= hardwired_vsstrt + 3 && minfirstline > hardwired_vsstrt + 3 && firstblankedline < minfirstline) { - minfirstline = hardwired_vsstrt + 3; - if (minfirstline_hw > minfirstline) { - minfirstline_hw = minfirstline; - } - } - } else { - firstblankedline = maxvpos + 1; +#ifdef DEBUGGER + if (debug_copper) { + record_copper_reset(); } - if (beamcon0 & (BEAMCON0_VARVBEN | bemcon0_vsync_mask)) { - programmedmode = 2; + if (debug_dma) { + record_dma_reset(0); } +#endif - int eh = currprefs.gfx_extraheight; - if (eh > 0) { - if (beamcon0 & bemcon0_vsync_mask) { - maxvpos_display_vsync += eh / 2; - minfirstline -= eh / 2; - } else { - maxvpos_display_vsync = 3; - minfirstline -= eh / 2; - } +#ifdef PICASSO96 + if (p96refresh_active) { +// vpos_count = p96refresh_active; +// vpos_count_diff = p96refresh_active; +// vtotal = vpos_count; } +#endif - if (maxvpos_display_vsync <= 0) { - maxvpos_display_vsync = 0; - } + devices_vsync_post(); - if (minfirstline < vsync_startline) { - minfirstline = vsync_startline; - } + check_display_mode_change(); - if (minfirstline >= maxvpos) { - minfirstline = maxvpos - 1; - } + check_interlace(); + vsync_check_vsyncmode(); - if (firstblankedline < minfirstline) { - firstblankedline = maxvpos + maxvpos_display_vsync + 1; + if (bogusframe > 0) { + bogusframe--; } - if (minfirstline < minfirstline_hw) { - minfirstline = minfirstline_hw; + if (nosignal_status < 0) { + nosignal_status = 0; } - - if (beamcon0 & bemcon0_vsync_mask) { - if (maxvpos_display_vsync >= vsstrt + 3) { - maxvpos_display_vsync = vsstrt + 3; - } - if (minfirstline < vsync_startline) { - minfirstline = vsync_startline; + if (nosignal_cnt) { + nosignal_cnt--; + if (nosignal_cnt == 0) { + nosignal_status = -1; } } - - if (beamcon0 & BEAMCON0_VARBEAMEN) { - float half = (beamcon0 & BEAMCON0_PAL) ? 0: ((beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f); - vblank_hz_nom = vblank_hz = clk / (maxvpos * (maxhpos + half)); - vblank_hz_shf = vblank_hz; - vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); - vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); - - maxvpos_nom = maxvpos; - maxvpos_display = maxvpos; - equ_vblank_endline = -1; - - programmedmode = 2; - if ((htotal < 226 || htotal > 229) || (vtotal < 256 || vtotal > 320)) { - doublescan = htotal <= 164 && vtotal >= 350 ? 1 : 0; - // if superhires and wide enough: not doublescan - if (doublescan && htotal >= 140 && (bplcon0 & 0x0040)) - doublescan = 0; - programmedmode = 1; - } - - vpos_count = maxvpos_nom; - vpos_count_diff = maxvpos_nom; - } - - // exclude possible extra lines that are inside vertical blank - if (currprefs.gfx_overscanmode < OVERSCANMODE_EXTREME) { - if (beamcon0 & BEAMCON0_VARBEAMEN) { - if (firstblankedline < maxvpos / 2 && maxvpos_display_vsync > firstblankedline) { - maxvpos_display_vsync = firstblankedline; - } else if (firstblankedline <= maxvpos) { - maxvpos_display_vsync = 1; + if (nosignal_trigger) { + struct amigadisplay *ad = &adisplays[0]; + nosignal_trigger = false; + if (!ad->specialmonitoron) { + if (currprefs.gfx_monitorblankdelay > 0) { + nosignal_status = 1; + nosignal_cnt = (int)(currprefs.gfx_monitorblankdelay / (1000.0f / vblank_hz)); + if (nosignal_cnt <= 0) { + nosignal_cnt = 1; + } + } else { + nosignal_status = 2; + nosignal_cnt = (int)(vblank_hz / 2); } } } - if (maxvpos_display_vsync <= 0) { - maxvpos_display_vsync = 1; + config_check_vsync(); + if (timehack_alive > 0) { + timehack_alive--; } - if (maxvpos_nom >= MAXVPOS) { - maxvpos_nom = MAXVPOS; - } - if (maxvpos_display >= MAXVPOS) { - maxvpos_display = MAXVPOS; - } - if (currprefs.gfx_scandoubler && doublescan == 0) { - doublescan = -1; - } - /* limit to sane values */ - if (vblank_hz < 10) { - vblank_hz = 10; - } - if (vblank_hz > 300) { - vblank_hz = 300; - } - maxhpos_short = maxhpos; - minfirstline_linear = minfirstline; - set_delay_lastcycle(); - updateextblk(); - maxvpos_total = ecs_agnus ? (MAXVPOS_LINES_ECS - 1) : (MAXVPOS_LINES_OCS - 1); - if (maxvpos_total > MAXVPOS) { - maxvpos_total = MAXVPOS; - } - set_maxhpos(maxhpos); - estimated_fm = 0xffff; - maxvsize_display = maxvpos_display + maxvpos_display_vsync - minfirstline; + vsync_handle_check(); - if ((currprefs.m68k_speed == 0 || copper_access) && maxhpos != oldmaxhpos) { - if (hpos >= maxhpos) { - // count until 255 -> 0 wrap around - eventtab[ev_hsync].evtime = line_start_cycles + 256 * CYCLE_UNIT; - // mark current line lenght = 0x100 - set_maxhpos(0x100); - } else { - // adjust current scanline length to match new maxhpos - eventtab[ev_hsync].evtime = line_start_cycles + maxhpos * CYCLE_UNIT; - } - current_hpos(); - events_schedule(); - } + //init_hardware_frame(); + + vsync_cycles = get_cycles(); } -static void init_hz(bool checkvposw) +static void copper_check(int n) { - int isntsc, islace; - int odbl = doublescan; - double ovblank = vblank_hz; - int hzc = 0; - int omaxhpos = maxhpos; - int omaxvpos = maxvpos; - - if (!checkvposw) { - vpos_count = 0; + if (cop_state.state == COP_wait) { + int vp = vpos & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); + if (vp < cop_state.vcmp) { + if (copper_enabled_thisline) { + write_log(_T("COPPER BUG %d: vp=%d vpos=%d vcmp=%d thisline=%d\n"), n, vp, vpos, cop_state.vcmp, copper_enabled_thisline); + } + } } +} - isntsc = (new_beamcon0 & BEAMCON0_PAL) ? 0 : 1; - islace = (interlace_seen) ? 1 : 0; - if (!ecs_agnus) { - isntsc = currprefs.ntscmode ? 1 : 0; - } +#if 0 +static void reset_scandoubler_sync(int hpos) +{ + last_decide_line_hpos = hpos; + last_decide_sprite_hpos = hpos; + last_fetch_hpos = hpos; + last_copper_hpos = hpos; + last_diw_hpos = hpos; + last_sprite_hpos = hpos; + sprites_enabled_this_line = false; + plfstrt_sprite = 0x100; + bprun = 0; + bprun_cycle = 0; + ddf_stopping = 0; + int hnew = hpos - (REFRESH_FIRST_HPOS - HARDWIRED_DMA_TRIGGER_HPOS + 2); + hdiw_denisecounter = ((hnew + 0) & 0xff) << CCK_SHRES_SHIFT; + last_sprite_hpos = last_sprite_point = (((hnew + 0) & 0xff) << 1) + 1; +} +#endif - vpos_count_diff = vpos_count; - doublescan = 0; - programmedmode = 0; - if ((beamcon0 & (BEAMCON0_VARBEAMEN | BEAMCON0_PAL)) != (new_beamcon0 & (BEAMCON0_VARBEAMEN | BEAMCON0_PAL))) { - hzc = 1; - } - if (beamcon0 != new_beamcon0) { - vpos_count_diff = vpos_count = 0; - } - if ((beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) != (new_beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN))) { - hzc = 1; - } +/* - init_beamcon0(checkvposw); +0 0 - +1 1 -- +2 2 - +3 3 -- +4 4 - +5 5 -- - if (doublescan != odbl || maxvpos != omaxvpos) { - hzc = 1; - } +0 x -+ +1 0 -- +2 1 - +3 2 -- +4 3 - +5 4 -- - eventtab[ev_hsync].oldcycles = get_cycles(); - eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME; - events_schedule(); - if (hzc) { - interlace_seen = islace; - reset_drawing(); - } +*/ - if (maxvpos != omaxvpos || maxhpos != omaxhpos) { - nosignal_trigger = true; - } +#if 0 +static void hsync_scandoubler(int hpos) +{ + uae_u16 odmacon = dmacon; + int ocop = copper_enabled_thisline; + uaecptr bpltmp[MAX_PLANES], bpltmpx[MAX_PLANES]; + int lof = lof_display; -#ifdef PICASSO96 - if (!p96refresh_active) { - maxvpos_stored = maxvpos; - maxhpos_stored = maxhpos; - vblank_hz_stored = vblank_hz; + if (vb_start_line > 2) { + return; } -#endif - compute_framesync(); - devices_syncchange(); + scandoubled_line = 1; + line_disabled |= 8; + last_hdiw = 0 - 1; -#ifdef PICASSO96 - init_hz_p96(0); -#endif - if (vblank_hz != ovblank) { - updatedisplayarea(0); + for (int i = 0; i < MAX_PLANES; i++) { + bpltmp[i] = bplpt[i]; + bpltmpx[i] = bplptx[i]; + uaecptr pb1 = prevbpl[lof][vpos][i]; + uaecptr pb2 = prevbpl[1 - lof][vpos][i]; + if (pb1 && pb2) { + int diff = pb1 - pb2; + if (lof) { + if (bplcon0 & 4) { + bplpt[i] = pb1 - diff; + } + } else { + if (bplcon0 & 4) { + bplpt[i] = pb1; + } else { + bplpt[i] = bplpt[i] - diff; + } + } + } } - inputdevice_tablet_strobe(); - if (varsync_changed > 0) { - varsync_changed = 0; - dumpsync(); - } -} + uae_u8 cycle_line_slot_tmp[MAX_CHIPSETSLOTS]; + uae_u16 cycle_line_pipe_tmp[MAX_CHIPSETSLOTS]; -static void init_hz_vposw(void) -{ - init_hz(true); -} + memcpy(cycle_line_slot_tmp, cycle_line_slot, sizeof(uae_u8) * MAX_CHIPSETSLOTS); + memcpy(cycle_line_pipe_tmp, cycle_line_pipe, sizeof(uae_u16) * MAX_CHIPSETSLOTS); -void init_hz_normal(void) -{ - init_hz(false); -} + reset_decisions_scanline_start(); + reset_scandoubler_sync(hpos); + reset_decisions_hsync_start(); -static void calcdiw(void) -{ - int hstrt = (diwstrt & 0xFF) << 2; - int hstop = (diwstop & 0xFF) << 2; - int vstrt = diwstrt >> 8; - int vstop = diwstop >> 8; + // Bitplane and sprites only + dmacon = odmacon & (DMA_MASTER | DMA_BITPLANE | DMA_SPRITE); + copper_enabled_thisline = 0; - // ECS Agnus/AGA: DIWHIGH vertical high bits. - if (diwhigh_written && ecs_agnus) { - if (aga_mode) { - vstrt |= (diwhigh & 7) << 8; - vstop |= ((diwhigh >> 8) & 7) << 8; - } else { - // ECS Agnus has undocumented V11! - vstrt |= (diwhigh & 15) << 8; - vstop |= ((diwhigh >> 8) & 15) << 8; - } - } else { - if ((vstop & 0x80) == 0) - vstop |= 0x100; - } - // ECS Denise/AGA: horizontal DIWHIGH high bit. - if (diwhigh_written && ecs_denise) { - hstrt |= ((diwhigh >> 5) & 1) << (8 + 2); - hstop |= ((diwhigh >> 13) & 1) << (8 + 2); - } else { - hstop |= 0x100 << 2; - } - // AGA only: horizontal DIWHIGH hires/shres bits. - if (diwhigh_written && aga_mode) { - hstrt |= (diwhigh >> 3) & 3; - hstop |= (diwhigh >> 11) & 3; + // copy color changes + struct draw_info *dip1 = curr_drawinfo + next_lineno - 1; + for (int idx1 = dip1->first_color_change; idx1 < dip1->last_color_change; idx1++) { + struct color_change *cs2 = &curr_color_changes[idx1]; + struct color_change *cs1 = &curr_color_changes[next_color_change]; + memcpy(cs1, cs2, sizeof(struct color_change)); + next_color_change++; } + curr_color_changes[next_color_change].regno = -1; - diw_hstrt = hstrt; - diw_hstop = hstop; - - diwfirstword = coord_diw_shres_to_window_x(hstrt); - diwlastword = coord_diw_shres_to_window_x(hstop); - int mindiw = min_diwlastword; - if (diwfirstword < mindiw) { - diwfirstword = mindiw; - } + hpos_hsync_extra = 0; + finish_partial_decision(maxhpos); + hpos_hsync_extra = maxhpos; + finish_decisions(hpos); + hsync_record_line_state(next_lineno, nln_normal, thisline_changed); - int hpos = current_hpos(); + scandoubled_line = 0; + line_disabled &= ~8; - if (vstrt == vpos && vstop != vpos && vdiwstate == diw_states::DIW_waiting_start) { - // This may start BPL DMA immediately. - SET_LINE_CYCLEBASED(hpos); - } + dmacon = odmacon; + copper_enabled_thisline = ocop; - plffirstline = vstrt; - plflastline = vstop; + memcpy(cycle_line_slot, cycle_line_slot_tmp, sizeof(uae_u8) * MAX_CHIPSETSLOTS); + memcpy(cycle_line_pipe, cycle_line_pipe_tmp, sizeof(uae_u16) * MAX_CHIPSETSLOTS); - plfstrt = ddfstrt; - plfstop = ddfstop; - if (!ecs_agnus) { - plfstrt &= 0x00fc; - plfstop &= 0x00fc; + for (int i = 0; i < MAX_PLANES; i++) { + bplpt[i] = bpltmp[i]; + bplptx[i] = bpltmpx[i]; } - diw_change = 2; - - decide_vline(hpos); -} - -/* display mode changed (lores, doubling etc..), recalculate everything */ -void init_custom(void) -{ - check_nocustom(); - update_mirrors(); - create_cycle_diagram_table(); - reset_drawing(); - init_hz_normal(); - calcdiw(); - update_toscr_vars(); - compute_shifter_mask(); - compute_toscr_delay(bplcon1); - set_delay_lastcycle(); + reset_decisions_scanline_start(); + reset_scandoubler_sync(hpos); } - -static int timehack_alive = 0; - -static uae_u32 REGPARAM2 timehack_helper(TrapContext *context) -{ -#ifdef HAVE_GETTIMEOFDAY - struct timeval tv; - if (m68k_dreg(regs, 0) == 0) { - return timehack_alive; - } - - timehack_alive = 10; - - gettimeofday(&tv, NULL); - put_long(m68k_areg(regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60)); - put_long(m68k_areg(regs, 0) + 4, tv.tv_usec); - return 0; -#else - return 2; #endif -} -/* -* register functions -*/ -static uae_u16 DENISEID(int *missing) +static void dmal_emu_disk(struct rgabuf *rga, int slot, bool w) { - *missing = 0; - if (currprefs.cs_deniserev >= 0) { - return currprefs.cs_deniserev; - } -#ifdef AGA - if (aga_mode) { - if (currprefs.cs_ide == IDE_A4000) { - return 0xFCF8; + uae_u16 dat = 0; + // disk_fifostatus() needed in >100% disk speed modes + if (w) { + // write to disk + if (disk_fifostatus() <= 0) { + uaecptr pt = rga->pv; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(rga->reg, pt, DMARECORD_DISK, slot); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(pt, MW_MASK_DISK, rga->reg); + } +#endif + dat = chipmem_wget_indirect(pt); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(dat); + } + if (memwatch_enabled) { + debug_getpeekdma_value(dat); + } +#endif + regs.chipset_latch_rw = last_custom_value = dat; + DSKDAT(dat); } - return 0x00F8; - } + } else { + // read from disk + if (disk_fifostatus() >= 0) { + uaecptr pt = *rga->p; + dat = DSKDATR(slot); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_write(rga->reg, dat, pt, DMARECORD_DISK, slot); + } + if (memwatch_enabled) { + debug_putpeekdma_chipram(pt, dat, MW_MASK_DISK, rga->reg); + } #endif - if (ecs_denise) { - return 0xFFFC; - } - if (currprefs.cpu_model == 68000 && (currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact)) { - *missing = 1; + chipmem_wput_indirect(pt, dat); + regs.chipset_latch_rw = last_custom_value = dat; + } } - return 0xFFFF; } -static bool blit_busy(int hpos, bool dmaconr) +static void dmal_emu_audio(struct rgabuf *rga, int nr) { - // DMACONR latch load takes 1 cycle. Copper sees it immediately. - if (dmaconr && blt_info.finishhpos == hpos) { - return true; + uaecptr pt = rga->pv; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0xaa + nr * 16, pt, DMARECORD_AUDIO, nr); } - if (!blt_info.blit_main && !blt_info.blit_finald) { - return false; + if (memwatch_enabled) { + debug_getpeekdma_chipram(pt, MW_MASK_AUDIO_0 << nr, rga->reg); } - // AGA apparently fixes both bugs. - if (agnusa1000) { - // Blitter busy bug: A1000 Agnus only sets busy-bit when blitter gets first DMA slot. - if (!blt_info.got_cycle) { - return false; - } - if (blt_info.blit_pending) { - return true; - } - // Blitter is considered finished even if last D has not yet been written - if (!blt_info.blit_main) { - return false; - } - } else if (!aga_mode) { - if (blt_info.blit_pending) { - return true; - } - // Blitter is considered finished even if last D has not yet been written - if (!blt_info.blit_main) { - return false; - } +#endif + uae_u16 dat = chipmem_wget_indirect(pt); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(dat); } - return true; + if (memwatch_enabled) { + debug_getpeekdma_value(dat); + } +#endif + regs.chipset_latch_rw = last_custom_value = dat; + AUDxDAT(nr, dat, pt); } -STATIC_INLINE uae_u16 DMACONR(int hpos) -{ - decide_line(hpos); - decide_fetch_safe(hpos); - dmacon &= ~(0x4000 | 0x2000); - dmacon |= (blit_busy(hpos, true) ? 0x4000 : 0x0000) | (blt_info.blitzero ? 0x2000 : 0); - return dmacon; -} -STATIC_INLINE uae_u16 INTENAR(void) -{ - return intena & 0x7fff; -} -uae_u16 INTREQR(void) -{ - return intreq & 0x7fff; -} -STATIC_INLINE uae_u16 ADKCONR(void) +static void lightpen_trigger_func(uae_u32 v) { - return adkcon & 0x7fff; + vpos_lpen = vpos; + hpos_lpen = v; + hhpos_lpen = HHPOSR(); + lightpen_triggered = 1; } -STATIC_INLINE int islightpentriggered(void) -{ - if (beamcon0 & BEAMCON0_LPENDIS) - return 0; - return lightpen_triggered != 0; -} -STATIC_INLINE int issyncstopped(void) +static bool is_custom_vsync (void) { - return (bplcon0 & 2) && (!currprefs.genlock || currprefs.genlock_effects); + int vp = vpos; + if (vp == maxvpos + lof_store) { + // vpos_count >= MAXVPOS just to not crash if VPOSW writes prevent vsync completely + return true; + } + return false; } -STATIC_INLINE int GETVPOS(void) +static bool do_render_slice(int mode, int slicecnt, int lastline) { - return islightpentriggered() ? vpos_lpen : (issyncstopped() ? vpos_previous : vpos); + //draw_lines(lastline, slicecnt); + crender_screen(0, mode, true); + return true; } -STATIC_INLINE int GETHPOS(void) + +static bool do_display_slice(void) { - return islightpentriggered() ? hpos_lpen : (issyncstopped() ? hpos_previous : current_hpos()); + show_screen(0, -1); + inputdevice_hsync(true); + return true; } -// fake changing hpos when rom genlock test runs and genlock is connected -static bool hsyncdelay(void) +static void reset_autoscale(void) { - if (!currprefs.genlock || currprefs.genlock_effects) { - return false; - } - if (currprefs.cpu_memory_cycle_exact || currprefs.m68k_speed >= 0) { - return false; - } - if (bplcon0 == (0x0100 | 0x0002)) { - return true; + first_bpl_vpos = -1; + if (first_bplcon0 != first_bplcon0_old) { + vertical_changed = horizontal_changed = true; } - return false; -} - -#define CPU_ACCURATE (currprefs.cpu_model < 68020 || (currprefs.cpu_model == 68020 && currprefs.cpu_memory_cycle_exact)) + first_bplcon0_old = first_bplcon0; -static void check_line_enabled(void) -{ - line_disabled &= ~3; - line_disabled |= line_hidden() ? 1 : 0; - line_disabled |= custom_disabled ? 2 : 0; -} + if (first_planes_vpos != first_planes_vpos_old || + last_planes_vpos != last_planes_vpos_old) { + vertical_changed = true; + } + first_planes_vpos_old = first_planes_vpos; + last_planes_vpos_old = last_planes_vpos; -void get_mode_blanking_limits(int *phbstop, int *phbstrt, int *pvbstop, int *pvbstrt) -{ - if (new_beamcon0 & BEAMCON0_VARVBEN) { - *pvbstop = vbstop; - *pvbstrt = vbstrt; - *phbstop = hbstop_v; - *phbstrt = hbstrt_v; - } else { - *pvbstop = hardwired_vbstop; - *pvbstrt = hardwired_vbstrt; - *phbstop = (47 << CCK_SHRES_SHIFT) - 7; - *phbstrt = ((maxhpos_short + 8) << CCK_SHRES_SHIFT) - 3; + if (diwfirstword_total != diwfirstword_total_old || + diwlastword_total != diwlastword_total_old || + ddffirstword_total != ddffirstword_total_old || + ddflastword_total != ddflastword_total_old) { + horizontal_changed = true; } + diwfirstword_total_old = diwfirstword_total; + diwlastword_total_old = diwlastword_total; + ddffirstword_total_old = ddffirstword_total; + ddflastword_total_old = ddflastword_total; + + first_planes_vpos = 0; + last_planes_vpos = 0; + diwfirstword_total = 30000; + diwlastword_total = 0; + ddffirstword_total = 30000; + ddflastword_total = 0; + plflastline_total = 0; + plffirstline_total = 30000; + first_bplcon0 = 0; + autoscale_bordercolors = 0; } -static void vb_check(void) +static void hautoscale_check(void) { - check_line_enabled(); - - // A1000 Agnus VBSTRT=first line, OCS and later: VBSTRT=last line - if (agnusa1000) { - if (vpos == 0) { - vb_start_line = 1; - vb_state = true; + int vp = linear_vpos; + // border detection/autoscale + if (bplcon0_planes > 0 && dmaen(DMA_BITPLANE) && !agnus_vb_active) { + if (first_bplcon0 == 0) { + first_bplcon0 = bplcon0; } - } else { - if (vpos == hardwired_vbstrt + lof_store - 1) { - vb_start_line = 1; - vb_state = true; + if (vp > last_planes_vpos) { + last_planes_vpos = vp; + } + if (vp >= minfirstline_linear && first_planes_vpos == 0) { + first_planes_vpos = vp; + } else if (vp > current_linear_vpos) { + last_planes_vpos = current_linear_vpos; } - } - if (vpos == hardwired_vbstop - 1) { - vb_end_line = true; - vb_state = false; - } - if (vpos == hardwired_vbstop) { - vb_end_line = false; - vb_state = false; - vb_start_line = 0; - vb_end_next_line = true; } } -static void vhpos_adj(uae_u16 *hpp, uae_u16 *vpp) +// this finishes current line +static void hsync_handler_pre(bool onvsync) { - uae_u16 hp = *hpp; - uae_u16 vp = *vpp; - - hp++; - if (hp == maxhposm0) { - hp = 0; - } else if (hp == 1) { - // HP=0-1: VP = previous line. - vp = vpos_prev; - } + if (!custom_disabled) { - *hpp = hp; - *vpp = vp; -} + // make sure decisions are done to end of scanline + //finish_partial_decision(maxhpos); + //clear_bitplane_pipeline(0); -static uae_u16 VPOSR(void) -{ - uae_u16 csbit = 0; - uae_u16 vp = GETVPOS(); - uae_u16 hp = GETHPOS(); - int lofr = lof_store; - int lolr = lol; + /* reset light pen latch */ + if (agnus_vb_active_end_line) { + lightpen_triggered = 0; + sprite_0 = 0; + } - if (hp == 0) { - // LOF and LOL toggles when HPOS=1 - // Return pre-toggled value if VPOSR is read when HPOS=0 - if (vp == 0) { - if ((bplcon0 & 4) && CPU_ACCURATE) { - lofr = lofr ? 0 : 1; + if (!lightpen_triggered && (bplcon0 & 8)) { + // lightpen always triggers at the beginning of the last line + if (agnus_pvb_start_line) { + vpos_lpen = vpos; + hpos_lpen = 1; + hhpos_lpen = HHPOSR(); + lightpen_triggered = 1; + } else if (lightpen_enabled && !agnus_vb_active) { + int lpnum = inputdevice_get_lightpen_id(); + if (lpnum < 0) { + lpnum = 0; + } + if (lightpen_cx[lpnum] > 0 && lightpen_cy[lpnum] == vpos) { + event2_newevent_xx(-1, lightpen_cx[lpnum] * CYCLE_UNIT, lightpen_cx[lpnum], lightpen_trigger_func); + } } } - if (linetoggle) { - lolr = lolr ? 0 : 1; - } + } - vhpos_adj(&hp, &vp); - vp = (vp >> 8) & 7; + devices_hsync(); - if (currprefs.cs_agnusrev >= 0) { - csbit |= currprefs.cs_agnusrev << 8; - } else { -#ifdef AGA - csbit |= aga_mode ? 0x2300 : 0; + hsync_counter++; + + check_line_enabled(); + +#ifdef DEBUGGER + debug_hsync(); #endif - csbit |= ecs_agnus ? 0x2000 : 0; -#if 0 /* apparently "8372 (Fat-hr) (agnushr),rev 5" does not exist */ - if (currprefs.chipmem_size > 1024 * 1024 && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) - csbit |= 0x2100; -#endif - if (currprefs.ntscmode) { - csbit |= 0x1000; - } - } +} - if (!ecs_agnus) { - vp &= 1; - } else { - vp |= lolr ? 0x80 : 0; - } - vp |= (lofr ? 0x8000 : 0) | csbit; - hsyncdelay(); -#if 0 - if (1 || (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000)) - write_log (_T("VPOSR %04x at %08x\n"), vp, M68K_GETPC); +// low latency vsync + +#define LLV_DEBUG 0 + +static bool sync_timeout_check(frame_time_t max) +{ +#if LLV_DEBUG + return true; +#else + frame_time_t rpt = read_processor_time(); + return rpt - max <= 0; #endif - return vp; } -static void VPOSW(int hpos, uae_u16 v) +extern int busywait; +static void scanlinesleep(int currline, int nextline) { - int oldvpos = vpos; - int newvpos = vpos; - -#if 0 - if (M68K_GETPC < 0xf00000 || 1) - write_log (_T("VPOSW %04X PC=%08x\n"), v, M68K_GETPC); -#endif - if (lof_store != ((v & 0x8000) ? 1 : 0)) { - lof_store = (v & 0x8000) ? 1 : 0; - lof_changing = lof_store ? 1 : -1; - } - if (ecs_agnus) { - // LOL is always reset when VPOSW is written to. - lol = 0; - } - if (lof_changing) { + if (currline < 0) return; + if (currline >= nextline) + return; + if (vsync_hblank) { + int diff = (int)(vsync_hblank / (nextline - currline)); + int us = 1000000 / diff; + if (us < target_sleep_nanos(-1)) { // spin if less than minimum sleep time + target_spin(nextline - currline - 1); + return; + } } - newvpos &= 0x00ff; - v &= 7; - if (!ecs_agnus) { - v &= 1; - } - newvpos |= v << 8; - - if (newvpos != oldvpos) { - decide_line(hpos); - decide_fetch_safe(hpos); - cia_adjust_eclock_phase((newvpos - oldvpos) * maxhpos); - vposw_change++; - vpos = newvpos; - vb_check(); - decide_vline(hpos); - SET_LINE_CYCLEBASED(hpos); + if (busywait) { + target_spin(1); + return; } + if (currprefs.m68k_speed < 0) + sleep_millis_main(1); + else + target_sleep_nanos(500); } -static void VHPOSW_delayed(uae_u32 v) +static void linesync_first_last_line(int *first, int *last) { - int oldvpos = vpos; - int newvpos = vpos; - int hpos_org = current_hpos(); - int hnew = hpos_org; - bool enabled = false; - - decide_vline(hpos_org); - decide_hdiw(hpos_org); - decide_line(hpos_org); - decide_fetch_safe(hpos_org); - decide_sprites(hpos_org); - flush_display(fetchmode); - -#if 0 - if (M68K_GETPC < 0xf00000 || 1) - write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC); -#endif - - bool cpu_accurate = currprefs.m68k_speed >= 0 && !currprefs.cachesize && currprefs.cpu_memory_cycle_exact; + int x, y, w, h; + *first = minfirstline; + *last = maxvpos_display; + get_custom_raw_limits(&w, &h, &x, &y); + if (y > 0) + *first += y; + //write_log(_T("y=%d h=%d mfl=%d maxvpos=%d\n"), y, h, minfirstline, maxvpos_display); +} - if (cpu_accurate || copper_access) { - enabled = true; - int hpos = hpos_org; - hnew = (v & 0xff); - int hnew_org = hnew; - bool newinc = false; - if (hpos == 0 || hpos == 1) { - hpos += maxhpos; - } - if (hnew == 0 || hnew == 1) { - hnew += maxhpos; - newinc = true; - } - int hdiff = hnew - hpos; +static int vsyncnextscanline; +static int vsyncnextscanline_add; +static int nextwaitvpos; +static int display_slice_cnt; +static int display_slice_lines; +static int display_slices; +static bool display_rendered; +static int vsyncnextstep; - //write_log("%02x %02x %d\n", hpos_org, hnew_org, hdiff); +static bool linesync_beam_single_dual(void) +{ + bool was_syncline = is_syncline != 0; + frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; + int vp; - if (hdiff <= -maxhpos / 2 || hdiff >= maxhpos / 2) { - hdiff = 0; + if (is_last_line()) { + do_render_slice(-1, 0, vpos); + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + vp = target_get_display_scanline(-1); + if (vp >= 0) + break; } - if (copper_access && (hdiff & 1)) { - write_log("VHPOSW write %04X. New horizontal value is odd. Copper confusion possible.\n", v); + vsyncmintime = read_processor_time() + vsynctimebase; + vsync_clear(); + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight - 1 || vp < 0) + break; + scanlinesleep(vp, vsync_activeheight - 1); } - - if (hdiff) { - bool fail = false; - if (hdiff & 1) { - vhposr_delay_offset = 1; + frame_rendered = true; + frame_shown = true; + do_display_slice(); + int vv = (int)vsync_vblank; + while (vv >= 85) { + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + vp = target_get_display_scanline(-1); + if (vp < vsync_activeheight / 2) + break; } - - evt_t hsync_evtime = eventtab[ev_hsync].evtime; - evt_t hsync_oldcycles = eventtab[ev_hsync].oldcycles; - evt_t hsynch_evtime = eventtab[ev_hsynch].evtime; - evt_t hsynch_oldcycles = eventtab[ev_hsynch].oldcycles; - - set_maxhpos(maxhpos); - if (newinc && hnew == maxhpos + 1) { - // 0000 -> 0001 (0 and 1 are part of previous line, vpos increases when hpos=1). No need to do anything - } else if (hnew_org == 0 && hpos_org > 1) { - fail = true; - } else if (hpos < maxhpos && hnew >= maxhpos) { - // maxhpos check skip: counter counts until it wraps around 0xFF->0x00 - int hdiff2 = (0x100 - hnew) - (maxhpos - hpos); - hdiff2 *= CYCLE_UNIT; - eventtab[ev_hsync].evtime += hdiff2; - eventtab[ev_hsync].oldcycles = get_cycles() - hnew * CYCLE_UNIT; - eventtab[ev_hsynch].evtime += hdiff2; - eventtab[ev_hsynch].oldcycles += hdiff2; - // mark current line lenght = 0x100 - set_maxhpos(0x100); - } else if (hdiff) { - hdiff = -hdiff; - hdiff *= CYCLE_UNIT; - eventtab[ev_hsync].evtime += hdiff; - eventtab[ev_hsync].oldcycles += hdiff; - eventtab[ev_hsynch].evtime += hdiff; - eventtab[ev_hsynch].oldcycles += hdiff; + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight / 2) + break; } - - int hpos2 = current_hpos_safe(); - if (hpos2 < 0 || hpos2 > 255 || fail) { - eventtab[ev_hsync].evtime = hsync_evtime; - eventtab[ev_hsync].oldcycles = hsync_oldcycles; - eventtab[ev_hsynch].evtime = hsynch_evtime; - eventtab[ev_hsynch].oldcycles = hsynch_oldcycles; - hdiff = 0; - hpos_org = -1; - set_maxhpos(maxhpos); + show_screen(0, 3); + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight - 1 || vp < vsync_activeheight / 2) + break; } + show_screen(0, 2); + vv -= currprefs.ntscmode ? 60 : 50; + } + return true; + } + return false; +} - events_schedule(); +static bool linesync_beam_single_single(void) +{ + bool was_syncline = is_syncline != 0; + frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; + int vp; - #ifdef DEBUGGER - if (newvpos == oldvpos && hdiff) { - record_dma_reoffset(vpos, hpos, hnew); + if (is_last_line()) { + if (vsyncnextstep != 1) { + vsyncnextstep = 1; + do_render_slice(-1, 0, vpos); + // wait until out of vblank + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + vp = target_get_display_scanline(-1); + if (vp >= 0 && vp < vsync_activeheight / 2) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -3; + return 0; + } + target_spin(0); } - #endif - - if (hdiff) { - int hold = hpos; - memset(cycle_line_slot + MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST, 0, sizeof(uae_u8) * MAX_CHIPSETSLOTS_EXTRA); - memset(cycle_line_pipe + MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST, 0, sizeof(uae_u16) * MAX_CHIPSETSLOTS_EXTRA); - memset(blitter_pipe + MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST, 0, sizeof(uae_u16) * MAX_CHIPSETSLOTS_EXTRA); - int total = (MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA) - (hnew > hold ? hnew : hold); - if (total > 0) { - memmove(cycle_line_slot + hnew, cycle_line_slot + hold, total * sizeof(uae_u8)); - memmove(cycle_line_pipe + hnew, cycle_line_pipe + hold, total * sizeof(uae_u16)); - memmove(blitter_pipe + hnew, blitter_pipe + hold, total * sizeof(uae_u16)); - if (hnew > hold) { - int t = hnew - hold; - memset(cycle_line_slot, 0, t * sizeof(uae_u8)); - memset(cycle_line_pipe, 0, t * sizeof(uae_u16)); - memset(blitter_pipe, 0, t * sizeof(uae_u16)); - } + } + if (vsyncnextstep != 2) { + vsyncnextstep = 2; + vsync_clear(); + // wait until second half of display + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight / 2) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -2; + is_syncline_end = vsync_activeheight - 1; + return 0; + } + scanlinesleep(vp, vsync_activeheight / 2); + } + } + if (vsyncnextstep != 3) { + vsyncnextstep = 3; + // wait until end of display (or start of next field) + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight - 1 || vp < vsync_activeheight / 2) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -2; + is_syncline_end = vsync_activeheight - 1; + return 0; } - int nhp = hnew + 1; - set_blitter_last(nhp); - last_copper_hpos = nhp; - last_fetch_hpos = nhp; - last_decide_line_hpos = nhp; - last_decide_sprite_hpos = nhp; + scanlinesleep(vp, vsync_activeheight - 1); } } - - delay_cycles = ((hnew + 0) & 0xff) << CCK_SHRES_SHIFT; - - last_diw_hpos = hnew << 1; - hdiw_denisecounter = ((hnew + 0) & 0xff) << CCK_SHRES_SHIFT; - } - - newvpos &= 0xff00; - newvpos |= v >> 8; - if (enabled && (hpos_org == 0 || hpos_org == 1)) { - newvpos++; - } - if (newvpos > vpos || (newvpos <= maxvpos && vpos > maxvpos) || cpu_accurate || copper_access) { - if (newvpos != oldvpos) { - vposw_change++; -#ifdef DEBUGGER - if (hpos_org >= 0) { - record_dma_hsync(hpos_org); - if (debug_dma) { - int vp = vpos; - vpos = newvpos; - record_dma_hsync(maxhpos); - vpos = vp; + if (vsyncnextstep != 4) { + vsyncnextstep = 4; + do_display_slice(); + frame_rendered = true; + frame_shown = true; + // wait until first half of display + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + vp = target_get_display_scanline(-1); + if (vp < vsync_activeheight / 2) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -(100 + vsync_activeheight / 2); + return 0; } + target_spin(0); } -#endif } - vpos = newvpos; -#ifdef DEBUGGER - record_dma_denise(hnew, hdiw_denisecounter >> 2); -#endif - vb_check(); - decide_vline(hnew); - vhposw_modified = true; + return true; } + return false; } -static void VHPOSW_delayed1(uae_u32 v) +static bool linesync_beam_multi_dual(void) { - int hpos = current_hpos(); - decide_hdiw(hpos); - decide_line(hpos); - decide_fetch_safe(hpos); - decide_sprites(hpos, false, true); - - int hnew = v & 0xff; - last_sprite_hpos = (hnew << 1) - 1; - last_sprite_point = (((hnew + 0) & 0xff) << 1) + 0; - - event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, VHPOSW_delayed); -} + frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; + bool input_read_done = false; + bool was_syncline = is_syncline != 0; -static void VHPOSW(uae_u16 v) -{ - event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, VHPOSW_delayed1); -} + events_reset_syncline(); + if (vpos == 0 && !was_syncline) { + int firstline, lastline; + linesync_first_last_line(&firstline, &lastline); -static uae_u16 VHPOSR(void) -{ - static uae_u16 oldhp; - uae_u16 vp = GETVPOS(); - uae_u16 hp = GETHPOS(); + display_slices = currprefs.gfx_display_sections; + if (display_slices <= 0) + display_slices = 1; + display_slice_cnt = 0; + vsyncnextscanline = vsync_activeheight / display_slices + 1; + vsyncnextscanline_add = vsync_activeheight / display_slices; + display_slice_lines = (lastline - firstline) / display_slices + 1; + nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; + if (display_slices <= 1) + nextwaitvpos = lastline + 1; + if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) + vsyncnextscanline = vsync_activeheight * 2 / 3; - vhpos_adj(&hp, &vp); + display_rendered = false; + frame_rendered = true; + frame_shown = true; + } - vp <<= 8; + if (!display_slices) + return false; - if (hsyncdelay()) { - // fake continuously changing hpos in fastest possible modes - hp = oldhp % maxhpos; - oldhp++; - } + if (vpos >= nextwaitvpos || is_last_line()) { - vp |= hp; + if (display_slice_cnt == 0) { -#if 0 - if (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000) - write_log (_T("VPOS %04x %04x at %08x\n"), VPOSR (), vp, M68K_GETPC); -#endif - return vp; -} + if (!was_syncline) { + do_render_slice(is_last_line() ? 1 : 2, display_slice_cnt, vpos); + display_rendered = true; + } -static uae_u16 HHPOSR(void) -{ - uae_u16 v; - if (islightpentriggered()) { - v = hhpos_lpen; - } else { - uae_u16 max = (new_beamcon0 & BEAMCON0_DUAL) ? htotal : maxhpos - 1; - v = hhpos + current_hpos() - hhpos_hpos; - if (hhpos <= max || v >= 0x100) { - if (max) { - v %= max; - } else { - v = 0; + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + int vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight - 1 || vp < 0) + break; } - } - } - v &= 0xff; - return v; -} -static void HHPOS(int hpos, uae_u16 v) -{ - hhpos = v & (MAXHPOS_ROWS - 1); - hhpos_hpos = hpos; -} + do_display_slice(); + display_rendered = false; + input_read_done = true; -static void SPRHSTRT(int hpos, uae_u16 v) -{ - sprhstrt = v; - sprhstrt_v = v & (MAXVPOS_LINES_ECS - 1); -} -static void SPRHSTOP(int hpos, uae_u16 v) -{ - sprhstop = v; - sprhstop_v = v & (MAXVPOS_LINES_ECS - 1); -} -static void BPLHSTRT(int hpos, uae_u16 v) -{ - bplhstrt = v; - bplhstrt_v = v & (MAXVPOS_LINES_ECS - 1); -} -static void BPLHSTOP(int hpos, uae_u16 v) -{ - bplhstop = v; - bplhstop_v = v & (MAXVPOS_LINES_ECS - 1); -} + } else { -/* + if (!currprefs.turbo_emulation) { + if (!was_syncline && !display_rendered) { + do_render_slice(0, display_slice_cnt, vpos - 1); + display_rendered = true; + } + while(sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + if (vp == -1) { + maybe_process_pull_audio(); + target_spin(0); + continue; + } + if (vp < 0 || vp >= vsyncnextscanline) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = vsyncnextscanline; + return 0; + } + maybe_process_pull_audio(); + scanlinesleep(vp, vsyncnextscanline); + } + do_display_slice(); + } - REFPTR bit mapping to hidden refresh DMA pointer register. + if (is_last_line()) { + // wait extra frames + int vv = (int)vsync_vblank; + for(;;) { + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + int vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight - 1 || vp < 0) + break; + } + show_screen(0, 3); + show_screen(0, 2); + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + int vp = target_get_display_scanline(-1); + if (vp >= vsync_activeheight / 2) + break; + } + vv -= currprefs.ntscmode ? 60 : 50; + if (vv < 85) + break; - OCS Agnus (RAS/CAS 9/9, 8-bit ROR refresh): + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + maybe_process_pull_audio(); + target_spin(0); + int vp = target_get_display_scanline(-1); + if (vp < vsync_activeheight / 2 && vp >= 0) + break; + } + } - B RAS CAS - 0: 000 080 - 1: 101 000 - 2: 002 100 - 3: 004 000 - 4: 008 000 - 5: 010 000 - 6: 020 000 - 7: 040 000 - 8: 080 000 - 9: 000 001 - A: 000 002 - B: 000 004 - C: 000 008 - D: 000 010 - E: 000 020 - F: 000 040 + } - ECS Agnus 1M (RAS/CAS 9/9, 9-bit ROR refresh): + input_read_done = true; + display_rendered = false; - B RAS CAS - 0: 080 000 - 1: 100 001 - 2: 000 102 - 3: 000 004 - 4: 000 008 - 5: 000 010 - 6: 000 020 - 7: 000 040 - 8: 000 080 - 9: 001 000 - A: 002 000 - B: 004 000 - C: 008 000 - D: 010 000 - E: 020 000 - F: 040 000 + vsyncnextscanline += vsync_activeheight / display_slices; + vsync_clear(); + } - ECS Agnus 2M (RAS/CAS 10/10, 9-bit ROR refresh): + nextwaitvpos += display_slice_lines; + display_slice_cnt++; - B RAS CAS - 0: 080 000 - 1: 100 001 - 2: 000 102 - 3: 200 004 - 4: 000 208 - 5: 000 010 - 6: 000 020 - 7: 000 040 - 8: 000 080 - 9: 001 000 - A: 002 000 - B: 004 000 - C: 008 000 - D: 010 000 - E: 020 000 - F: 040 000 - AGA (RAS/CAS 10/10, CBR refresh) + } + return input_read_done; +} - 0: 040/000 - 1: 080/001 - 2: 100/002 - 3: 200/004 - 4: 001/008 - 5: 000/010 - 6: 000/020 - 7: 000/040 - 8: 000/080 - 9: 000/100 - A: 000/200 - B: 002/000 - C: 004/000 - D: 008/000 - E: 010/000 - F: 020/000 +static bool linesync_beam_multi_single(void) +{ + frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; + bool input_read_done = false; + bool was_syncline = is_syncline != 0; -*/ + events_reset_syncline(); + if (vpos == 0 && !was_syncline) { + int firstline, lastline; + linesync_first_last_line(&firstline, &lastline); -static void REFPTR(int hpos, uae_u16 v) -{ - int diff = hpos - REFRESH_FIRST_HPOS; - // write exactly 1 cycle before refresh slot: write ignored. - if (diff == -1 || diff == 1 || diff == 3 || diff == 5) { - return; - } - int slot = diff / 2; - if (slot >= 0) { - if (slot > 4) { - slot = 4; - } - update_refptr(-1, slot, true, true); + display_slices = currprefs.gfx_display_sections; + if (!display_slices) + display_slices = 1; + display_slice_cnt = 0; + vsyncnextscanline = vsync_activeheight / display_slices + 1; + vsyncnextscanline_add = vsync_activeheight / display_slices; + display_slice_lines = (lastline - firstline) / display_slices + 1; + nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; + if (display_slices <= 1) + nextwaitvpos = lastline + 1; + if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) + vsyncnextscanline = vsync_activeheight * 2 / 3; + + display_rendered = false; + frame_rendered = true; + frame_shown = true; } - if (aga_mode) { - refptr = 0; - if (v & (1 << 0)) { - refptr |= 0x020000; - } - if (v & (1 << 1)) { - refptr |= 0x040000 | 0x000001; - } - if (v & (1 << 2)) { - refptr |= 0x000100 | 0x000002; - } - if (v & (1 << 3)) { - refptr |= 0x080000 | 0x000004; - } - if (v & (1 << 4)) { - refptr |= 0x000200 | 0x000008; - } - if (v & (1 << 5)) { - refptr |= 0x000010; - } - if (v & (1 << 6)) { - refptr |= 0x000020; - } - if (v & (1 << 7)) { - refptr |= 0x000040; - } - if (v & (1 << 8)) { - refptr |= 0x000080; - } - if (v & (1 << 9)) { - refptr |= 0x000400; - } - if (v & (1 << 10)) { - refptr |= 0x000800; - } - if (v & (1 << 11)) { - refptr |= 0x001000; - } - if (v & (1 << 12)) { - refptr |= 0x002000; - } - if (v & (1 << 13)) { - refptr |= 0x004000; - } - if (v & (1 << 14)) { - refptr |= 0x008000; - } - if (v & (1 << 15)) { - refptr |= 0x010000; - } - refptr <<= 1; - } else if (ecs_agnus) { - refptr = v & 0xfffe; - if (v & 1) { - refptr |= 0x10000; - } - if (v & 2) { - refptr |= 0x20000; - } - if (v & 4) { - refptr |= 0x40000; - } - if (v & 8) { - refptr |= 0x80000; + if (!display_slices) + return false; + + if (is_last_line()) { + + if (!was_syncline && !display_rendered) { + do_render_slice(1, display_slice_cnt, vpos); + display_rendered = true; } - if (currprefs.chipmem.size > 0x100000) { - if (v & 16) { - refptr |= 0x100000; + // if 2 slices: make sure we are out of vblank. + if (display_slices <= 2) { + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + if (vp != -1) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -3; + return 0; + } + target_spin(0); } + vsync_clear(); } - } else { - refptr = v & 0xfffe; - if (v & 1) { - refptr |= 0x10000; - } - if (v & 2) { - refptr |= 0x20000; - } - if (v & 4) { - refptr |= 0x40000; + + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + if (vp < 0 || vp >= vsyncnextscanline) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = vsyncnextscanline; + return 0; + } + scanlinesleep(vp, vsyncnextscanline); +#if LLV_DEBUG + write_log(_T("1:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif } - } -#if 0 - int ras, cas; - bool x = get_ras_cas(refptr, &ras, &cas); - write_log("%04x %08x %c %03x %03X\n", v, refptr, x ? '+' : ' ', ras, cas); + do_display_slice(); + input_read_done = true; + display_slice_cnt = -1; + display_rendered = false; +#if LLV_DEBUG + write_log("\n"); #endif -} -static int test_copper_dangerous(uaecptr address) -{ - int addr = address & 0x01fe; - if (addr < ((copcon & 2) ? (ecs_agnus ? 0 : 0x40) : 0x80)) { - cop_state.state = COP_stop; - copper_enabled_thisline = 0; - unset_special (SPCFLAG_COPPER); - return 1; - } - return 0; -} + } else if (vpos >= nextwaitvpos) { -// if DMA was changed during same cycle: previous value is used -static bool is_blitter_dma(void) -{ - bool dma = dmaen(DMA_BLITTER); - if (get_cycles() == blitter_dma_change_cycle) { - return dma == false; - } - return dma; -} -static bool is_copper_dma(bool checksame) -{ - bool dma = dmaen(DMA_COPPER); - if (checksame && get_cycles() == copper_dma_change_cycle) { - return dma == false; - } - return dma; -} + // topmost/first slice? + if (display_slice_cnt == 0) { -static void immediate_copper(int num) -{ - int pos = 0; - int oldpos = 0; + if (!currprefs.turbo_emulation) { + if (!was_syncline) { + do_render_slice(2, display_slice_cnt, vpos - 1); + display_rendered = true; + } - cop_state.state = COP_stop; - cop_state.ip = num == 1 ? cop1lc : cop2lc; + // flip slightly early because flip regularly gets delayed if done during vblank + int lastflipline = vsync_activeheight - vsyncnextscanline_add / 5; + while (sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + maybe_process_pull_audio(); + if (vp < vsync_activeheight / 2 || vp >= lastflipline) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline_end = lastflipline; + is_syncline = -2; + return 0; + } + target_spin(0); +#if LLV_DEBUG + write_log(_T("2:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif + } + do_display_slice(); + display_rendered = false; + input_read_done = true; - while (pos < (maxvpos << 5)) { - if (oldpos > pos) { - pos = oldpos; - } - if (!is_copper_dma(false)) { - break; - } - if (cop_state.ip >= currprefs.chipmem.size && - (cop_state.ip < currprefs.z3chipmem.start_address || cop_state.ip >= currprefs.z3chipmem.start_address + currprefs.z3chipmem.size) && - (cop_state.ip < debugmem_bank.start || cop_state.ip >= debugmem_bank.start + debugmem_bank.allocated_size)) - break; - pos++; - oldpos = pos; - cop_state.ir[0] = chipmem_wget_indirect (cop_state.ip); - cop_state.ir[1] = chipmem_wget_indirect (cop_state.ip + 2); - cop_state.ip += 4; - if (!(cop_state.ir[0] & 1)) { // move - cop_state.ir[0] &= 0x1fe; - if (cop_state.ir[0] == 0x88) { - cop_state.ip = cop1lc; - continue; - } - if (cop_state.ir[0] == 0x8a) { - cop_state.ip = cop2lc; - continue; - } - if (test_copper_dangerous(cop_state.ir[0])) { - break; - } - custom_wput_1 (0, cop_state.ir[0], cop_state.ir[1], 0); - } else { // wait or skip - if ((cop_state.ir[0] >> 8) > ((pos >> 5) & 0xff)) - pos = (((pos >> 5) & 0x100) | ((cop_state.ir[0] >> 8)) << 5) | ((cop_state.ir[0] & 0xff) >> 3); - if (cop_state.ir[0] >= 0xffdf && cop_state.ir[1] == 0xfffe) { - break; +#if 1 + // if flipped before vblank, wait for vblank + while (sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + if (vp < vsync_activeheight / 2) + break; + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -1; + is_syncline_end = vp; + return 0; + } + maybe_process_pull_audio(); + target_spin(0); + } +#endif } - } - } - cop_state.state = COP_stop; - unset_special (SPCFLAG_COPPER); -} -STATIC_INLINE void COP1LCH(uae_u16 v) -{ - cop1lc = (cop1lc & 0xffff) | ((uae_u32)v << 16); -} -STATIC_INLINE void COP1LCL(uae_u16 v) -{ - cop1lc = (cop1lc & ~0xffff) | (v & 0xfffe); -} -STATIC_INLINE void COP2LCH(uae_u16 v) -{ - cop2lc = (cop2lc & 0xffff) | ((uae_u32)v << 16); -} -STATIC_INLINE void COP2LCL(uae_u16 v) -{ - cop2lc = (cop2lc & ~0xffff) | (v & 0xfffe); -} - -static void compute_spcflag_copper(void); - -// normal COPJMP write: takes 2 more cycles -static void COPJMP(int num, int vblank) -{ - unset_special(SPCFLAG_COPPER); - cop_state.ignore_next = 0; + } else { - if (!cop_state.strobe) { - cop_state.state_prev = cop_state.state; - } - if ((cop_state.state == COP_wait1 || cop_state.state == COP_waitforever) && !vblank && is_copper_dma(false)) { - if (blt_info.blit_main) { - static int warned = 100; - if (warned > 0) { - write_log(_T("Potential buggy copper cycle conflict with blitter PC=%08x, COP=%08x\n"), M68K_GETPC, cop_state.ip); - warned--; - } - } - int hp = current_hpos(); - if ((hp & 1) && safecpu()) { - // CPU unaligned COPJMP while waiting - cop_state.state = COP_strobe_delay1x; - copper_bad_cycle_start = get_cycles(); - } else { - cop_state.state = COP_strobe_delay1; - } - } else { - if (vblank) { - cop_state.state = COP_strobe_delay2; - switch (cop_state.state_prev) - { - case copper_states::COP_read1: - // Wake up is delayed by 1 copper cycle if copper is currently loading words - cop_state.state = COP_strobe_delay3; - break; - case copper_states::COP_read2: - // Wake up is delayed by 1 copper cycle if copper is currently loading words - cop_state.state = COP_strobe_delay4; - break; + // skip if too close + int vp2 = target_get_display_scanline(-1); + if (!currprefs.turbo_emulation && (currprefs.m68k_speed < 0 || vp2 < vsyncnextscanline - vsyncnextscanline_add / 10)) { + if (!was_syncline && !display_rendered) { + do_render_slice(0, display_slice_cnt, vpos - 1); + display_rendered = true; + } + while (sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + // We are still in vblank and second slice? Poll until vblank ends. + if (display_slice_cnt == 1 && vp == -1) { + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -3; + return 0; + } + + target_spin(0); +#if LLV_DEBUG + write_log(_T("3:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif + continue; + } + if (vp < 0 || vp >= vsyncnextscanline) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = vsyncnextscanline; + return 0; + } + scanlinesleep(vp, vsyncnextscanline); +#if LLV_DEBUG + write_log(_T("4:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif + } + do_display_slice(); + input_read_done = true; + display_rendered = false; } - } else { - cop_state.state = copper_access ? COP_strobe_delay1 : COP_strobe_extra; + vsyncnextscanline += vsyncnextscanline_add; + vsync_clear(); } + nextwaitvpos += display_slice_lines; + display_slice_cnt++; +#if LLV_DEBUG + write_log("\n"); +#endif } - cop_state.vblankip = cop1lc; - copper_enabled_thisline = 0; - if (vblank) { - cop_state.strobe = num; - } else { - cop_state.strobe |= num; - } - cop_state.last_strobe = num; - - if (custom_disabled) { - immediate_copper(num); - return; - } - - compute_spcflag_copper(); -} -STATIC_INLINE void COPCON(uae_u16 a) -{ - copcon = a; + return input_read_done; } -static void check_copper_stop(void) +static bool linesync_beam_vrr(void) { - if (copper_enabled_thisline < 0 && !(is_copper_dma(false) && (dmacon & DMA_MASTER))) { - copper_enabled_thisline = 0; - unset_special(SPCFLAG_COPPER); - } -} + frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; + bool input_read_done = false; + bool was_syncline = is_syncline != 0; -static void copper_stop(void) -{ - copper_enabled_thisline = 0; - unset_special(SPCFLAG_COPPER); -} + events_reset_syncline(); + if (vpos == 0 && !was_syncline) { + int firstline, lastline; + linesync_first_last_line(&firstline, &lastline); -static void bitplane_dma_change(uae_u32 v) -{ - dmacon_bpl = (v & DMA_BITPLANE) && (v & DMA_MASTER); -} + display_slices = currprefs.gfx_display_sections; + if (!display_slices) + display_slices = 1; + display_slice_cnt = 0; + vsyncnextscanline = vsync_activeheight / display_slices + 1; + vsyncnextscanline_add = vsync_activeheight / display_slices; + display_slice_lines = (lastline - firstline) / display_slices + 1; + nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; + if (display_slices <= 1) + nextwaitvpos = lastline + 1; + if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) + vsyncnextscanline = vsync_activeheight * 2 / 3; -static void compute_spcflag_copper_delayed(uae_u32 v) -{ - compute_spcflag_copper(); -} + display_rendered = false; + frame_rendered = true; + frame_shown = true; + } -static void DMACON(int hpos, uae_u16 v) -{ - uae_u16 changed; - uae_u16 oldcon = dmacon; + if (!display_slices) + return false; - decide_line(hpos); - decide_fetch_safe(hpos); + if (is_last_line()) { - setclr(&dmacon, v); - dmacon &= 0x07FF; + if (!was_syncline && !display_rendered) { + do_render_slice(1, display_slice_cnt, vpos); + display_rendered = true; + } - changed = dmacon ^ oldcon; -#if 0 - if (changed) - write_log(_T("%04x -> %04x %08x\n"), oldcon, dmacon, m68k_getpc ()); + while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + if (vp < 0 || vp >= vsyncnextscanline) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = vsyncnextscanline; + return 0; + } + scanlinesleep(vp, vsyncnextscanline); +#if LLV_DEBUG + write_log(_T("1:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); #endif - - int oldcop = (oldcon & DMA_COPPER) && (oldcon & DMA_MASTER); - int newcop = (dmacon & DMA_COPPER) && (dmacon & DMA_MASTER); - if (!oldcop && newcop) { - bootwarpmode(); - } - if (newcop && !oldcop) { - if (copper_access || safecpu()) { - copper_dma_change_cycle = get_cycles(); - event2_newevent_xx(-1, CYCLE_UNIT, 0, compute_spcflag_copper_delayed); - } else { - compute_spcflag_copper(); } - } else if (!newcop && oldcop) { - if (copper_access || safecpu()) { - copper_dma_change_cycle = get_cycles(); - } - compute_spcflag_copper(); - } + do_display_slice(); + input_read_done = true; + display_slice_cnt = -1; + display_rendered = false; +#if LLV_DEBUG + write_log("\n"); +#endif - int oldblt = (oldcon & DMA_BLITTER) && (oldcon & DMA_MASTER); - int newblt = (dmacon & DMA_BLITTER) && (dmacon & DMA_MASTER); - if (oldblt != newblt && (copper_access || safecpu())) { - if (copper_access) { - blitter_dma_change_cycle = get_cycles(); - } else { - // because of CPU vs blitter emulation side-effect - blitter_dma_change_cycle = get_cycles() + CYCLE_UNIT; - } - } + } else if (vpos >= nextwaitvpos) { - int oldspr = (oldcon & DMA_SPRITE) && (oldcon & DMA_MASTER); - int newspr = (dmacon & DMA_SPRITE) && (dmacon & DMA_MASTER); - if (!oldspr && newspr) { - if (copper_access || safecpu()) { - sprite_dma_change_cycle_on = get_cycles() + CYCLE_UNIT; - } - } + // topmost/first slice? + if (display_slice_cnt == 0) { -#if 0 - int oldb = (oldcon & DMA_BLITTER) && (oldcon & DMA_MASTER); - int newb = (dmacon & DMA_BLITTER) && (dmacon & DMA_MASTER); - int oldbn = (oldcon & DMA_BLITPRI) != 0; - int newbn = (dmacon & DMA_BLITPRI) != 0; - if (oldbn != newbn) - write_log (_T("BLITTER NASTY: %d -> %d %08x\n"), oldbn, newbn, m68k_getpc ()); -#endif + if (!currprefs.turbo_emulation) { -#if SPRITE_DEBUG > 0 - { - int olds = (oldcon & DMA_SPRITE) && (oldcon & DMA_MASTER); - int news = (dmacon & DMA_SPRITE) && (dmacon & DMA_MASTER); - if (olds != news) - write_log (_T("SPRITE DMA: %d -> %d %08x\n"), olds, news, m68k_getpc ()); - } -#endif + frame_time_t rpt; + for (;;) { + rpt = read_processor_time(); + if (rpt - (vsyncmintime - vsynctimebase * 2 / 3) >= 0 || rpt - vsyncmintime < -2 * vsynctimebase) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -1; + is_syncline_end = target_get_display_scanline(-1); + return 0; + } + target_spin(0); + } - if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && (blt_info.blit_main || blt_info.blit_finald || blt_info.blit_queued)) { - set_special(SPCFLAG_BLTNASTY); - } + if (!was_syncline) { + do_render_slice(2, display_slice_cnt, vpos - 1); + display_rendered = true; + } - if (dmaen(DMA_BLITTER) && blt_info.blit_pending) { - blitter_check_start(); - } + for (;;) { + rpt = read_processor_time(); + if (rpt - vsyncmintime >= 0 || rpt - vsyncmintime < -2 * vsynctimebase) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = -1; + is_syncline_end = target_get_display_scanline(-1); + return 0; + } + target_spin(0); + } - if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) - unset_special(SPCFLAG_BLTNASTY); + if (rpt - vsyncmintime < vsynctimebase && rpt - vsyncmintime > -vsynctimebase) { + vsyncmintime += vsynctimebase; + } else { + vsyncmintime = rpt + vsynctimebase; + } + do_display_slice(); + display_rendered = false; + input_read_done = true; + } - if (changed & (DMA_MASTER | DMA_AUD3 | DMA_AUD2 | DMA_AUD1 | DMA_AUD0)) { - audio_state_machine(); - } + } else { - if (changed & (DMA_MASTER | DMA_BITPLANE)) { - // if ECS, DDFSTRT has already passed but DMA was off and DMA gets turned on: BPRUN actvates 1 cycle earlier - bool bpl = (dmacon & DMA_BITPLANE) && (dmacon & DMA_MASTER); - if (ecs_agnus && bpl && !dmacon_bpl && ddf_enable_on > 0) { - dmacon_bpl = true; - } else { - event2_newevent_xx(-1, CYCLE_UNIT, dmacon, bitplane_dma_change); + if (!currprefs.turbo_emulation) { + if (!was_syncline && !display_rendered) { + do_render_slice(0, display_slice_cnt, vpos - 1); + display_rendered = true; + } + while (sync_timeout_check(maxtime)) { + int vp = target_get_display_scanline(-1); + // We are still in vblank and second slice? Poll until vblank ends. + if (display_slice_cnt == 1 && vp == -1) { + maybe_process_pull_audio(); + target_spin(0); +#if LLV_DEBUG + write_log(_T("3:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif + continue; + } + if (vp < 0 || vp >= vsyncnextscanline) + break; + maybe_process_pull_audio(); + if (currprefs.m68k_speed < 0 && !was_syncline) { + is_syncline = vsyncnextscanline; + return 0; + } + scanlinesleep(vp, vsyncnextscanline); +#if LLV_DEBUG + write_log(_T("4:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); +#endif + } + do_display_slice(); + input_read_done = true; + display_rendered = false; + } + vsyncnextscanline += vsyncnextscanline_add; + vsync_clear(); } - SET_LINE_CYCLEBASED(hpos); + nextwaitvpos += display_slice_lines; + display_slice_cnt++; +#if LLV_DEBUG + write_log("\n"); +#endif } -} - -static int irq_forced; -static evt_t irq_forced_delay; -void IRQ_forced(int lvl, int delay) -{ - irq_forced = lvl; - irq_forced_delay = 0; - if (delay > 0 && currprefs.cpu_compatible) { - irq_forced_delay = get_cycles() + delay * CYCLE_UNIT; - } else if (delay < 0) { - irq_forced_delay = -1; - } - doint(); + return input_read_done; } -void intlev_ack(int lvl) +// called when extra CPU wait is done +void vsync_event_done(void) { - if (!irq_forced) { + if (!isvsync_chipset()) { + events_reset_syncline(); return; } - if (lvl >= irq_forced && irq_forced_delay < 0) { - irq_forced_delay = 0; - irq_forced = 0; + if (currprefs.gfx_display_sections <= 1) { + if (vsync_vblank >= 85) + linesync_beam_single_dual(); + else + linesync_beam_single_single(); + } else { + if (currprefs.gfx_variable_sync) + linesync_beam_vrr(); + else if (vsync_vblank >= 85) + linesync_beam_multi_dual(); + else + linesync_beam_multi_single(); } } -int intlev(void) +// this prepares for new line +static void hsync_handler_post(bool onvsync) { - if (irq_forced) { - int lvl = irq_forced; - if (irq_forced_delay == 0) { - irq_forced = 0; - } else if (irq_forced_delay > 0 && get_cycles() > irq_forced_delay) { - irq_forced = 0; - irq_forced_delay = 0; + // genlock active: + // vertical: interlaced = toggles every other field, non-interlaced = both fields (normal) + // horizontal: PAL = every line, NTSC = every other line + genlockhtoggle = !genlockhtoggle; + bool ciahsyncs = !(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock && (!currprefs.ntscmode || genlockhtoggle)); + bool ciavsyncs = !(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock && genlockvtoggle); + + CIA_hsync_posthandler(false, false); + if (currprefs.cs_cd32cd) { + CIA_hsync_posthandler(true, true); + CIAB_tod_handler(35); + } else if (ciahsyncs) { + CIA_hsync_posthandler(true, ciahsyncs); + if (beamcon0 & BEAMCON0_VARHSYEN) { + if (hsstop < (maxhpos & ~1) && hsstrt < maxhpos) { + CIAB_tod_handler(hsstop); + } + } else { + CIAB_tod_handler(35); // hsync end } - return lvl; } - uae_u16 imask = intreq2 & intena2; - if (!(imask && (intena2 & 0x4000))) - return 0; - if (imask & (0x4000 | 0x2000)) // 13 14 - return 6; - if (imask & (0x1000 | 0x0800)) // 11 12 - return 5; - if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10 - return 4; - if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6 - return 3; - if (imask & 0x0008) // 3 - return 2; - if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2 - return 1; - return 0; -} -void rethink_uae_int(void) -{ - bool irq2 = false; - bool irq6 = false; + if (currprefs.cs_cd32cd) { - if (uae_int_requested) { - if (uae_int_requested & 0xff00) { - irq6 = true; + if (cia_hsync < maxhpos) { + CIAA_tod_handler(cia_hsync); + cia_hsync += (akiko_ntscmode() ? 262 : 313) * maxhpos; + } else { + cia_hsync -= maxhpos; } - if (uae_int_requested & 0x00ff) { - irq2 = true; + + } else if (currprefs.cs_ciaatod > 0) { +#if 0 + static uae_s32 oldtick; + uae_s32 tick = read_system_time (); // milliseconds + int ms = 1000 / (currprefs.cs_ciaatod == 2 ? 60 : 50); + if (tick - oldtick > 2000 || tick - oldtick < -2000) { + oldtick = tick - ms; + write_log (_T("RESET\n")); + } + if (tick - oldtick >= ms) { + CIA_vsync_posthandler (1); + oldtick += ms; + } +#else + if (cia_hsync < maxhpos) { + int newcount; + CIAA_tod_handler(cia_hsync); + newcount = (int)((vblank_hz * (2 * maxvpos + (interlace_seen ? 1 : 0)) * (2 * maxhpos + (linetoggle ? 1 : 0))) / ((currprefs.cs_ciaatod == 2 ? 60 : 50) * 4)); + cia_hsync += newcount; + } else { + cia_hsync -= maxhpos; + } +#endif + } else if (currprefs.cs_ciaatod == 0 && ciavsyncs) { + // CIA-A TOD counter increases when vsync pulse ends + if (beamcon0 & BEAMCON0_VARVSYEN) { + if (vsstop == vpos) { + // Always uses HCENTER and HSSTRT registers. Even if VARHSYEN=0. + CIAA_tod_handler(lof_store ? hcenter : hsstrt); + } + } else { + if (vpos == (currprefs.ntscmode ? VSYNC_ENDLINE_NTSC : VSYNC_ENDLINE_PAL)) { + CIAA_tod_handler(lof_store ? 132 : 18); + } } } - { - extern void bsdsock_fake_int_handler(void); - extern int volatile bsd_int_requested; - if (bsd_int_requested) { - bsdsock_fake_int_handler(); +#if 0 + if (!custom_disabled) { + if (!currprefs.blitter_cycle_exact && blt_info.blit_main && dmaen (DMA_BITPLANE) && vdiwstate == diw_states::DIW_waiting_stop) { + blitter_slowdown(thisline_decision.plfleft, thisline_decision.plfright - (16 << fetchmode), + cycle_diagram_total_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)], + cycle_diagram_free_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)]); } } - if (irq6) { - safe_interrupt_set(IRQ_SOURCE_UAE, 0, true); - } - if (irq2) { - safe_interrupt_set(IRQ_SOURCE_UAE, 0, false); - } -} - -static void rethink_intreq(void) -{ -#ifdef SERIAL_PORT - serial_rethink(); #endif - devices_rethink(); -} -static void intreq_checks(uae_u16 oldreq, uae_u16 newreq) -{ - if ((oldreq & 0x0800) != (newreq & 0x0800)) { - serial_rbf_change((newreq & 0x0800) ? 1 : 0); + if (issyncstopped(bplcon0)) { + issyncstopped_count++; + } else { + issyncstopped_count = 0; } -} -static void event_doint_delay_do_ext(uae_u32 v) -{ - uae_u16 old = intreq2; - setclr(&intreq, (1 << v) | 0x8000); - setclr(&intreq2, (1 << v) | 0x8000); - doint(); -} +#if 0 + // AF testing stuff + static int cnt = 0; + cnt++; + if (cnt == 500) { + int port_insert_custom (int inputmap_port, int devicetype, DWORD flags, const TCHAR *custom); + //port_insert_custom (0, 2, 0, _T("Left=0xCB Right=0xCD Up=0xC8 Down=0xD0 Fire=0x39 Fire.autorepeat=0xD2")); + port_insert_custom (1, 2, 0, _T("Left=0x1E Right=0x20 Up=0x11 Down=0x1F Fire=0x38")); + } else if (0 && cnt == 1000) { + TCHAR out[256]; + bool port_get_custom (int inputmap_port, TCHAR *out); + port_get_custom (0, out); + port_get_custom (1, out); + } +#endif + bool input_read_done = false; -static void event_send_interrupt_do_ext(uae_u32 v) -{ - event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_ext); -} + if (currprefs.cpu_thread) { -// external delayed interrupt -void INTREQ_INT(int num, int delay) -{ - if (m68k_interrupt_delay) { - if (delay < CYCLE_UNIT) { - delay *= CYCLE_UNIT; - } - event2_newevent_xx(-1, delay + CYCLE_UNIT, num, event_doint_delay_do_ext); - } else { - event_doint_delay_do_ext(num); - } -} + maybe_process_pull_audio(); -static void event_doint_delay_do_intreq(uae_u32 v) -{ - uae_u16 old = intreq2; - setclr(&intreq2, v); + } else if (isvsync_chipset() < 0) { - doint(); -} + if (currprefs.gfx_display_sections <= 1) { + if (vsync_vblank >= 85) + input_read_done = linesync_beam_single_dual(); + else + input_read_done = linesync_beam_single_single(); + } else { + if (currprefs.gfx_variable_sync) + input_read_done = linesync_beam_vrr(); + else if (vsync_vblank >= 85) + input_read_done = linesync_beam_multi_dual(); + else + input_read_done = linesync_beam_multi_single(); + } -static void doint_delay_intreq(uae_u16 v) -{ - if (m68k_interrupt_delay) { - // INTREQ or INTENA write: IPL line changes 0.5 CCKs later. - // 68000 needs one more CPU clock (0.5 CCK) before it detects it. - event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_intreq); - } else { - event_doint_delay_do_intreq(v); + } else if (!currprefs.cpu_thread && !cpu_sleepmode && currprefs.m68k_speed < 0 && !currprefs.cpu_memory_cycle_exact) { + + static int sleeps_remaining; + if (0 && is_last_line ()) { + sleeps_remaining = (165 - currprefs.cpu_idle) / 6; + if (sleeps_remaining < 0) + sleeps_remaining = 0; + /* really last line, just run the cpu emulation until whole vsync time has been used */ + if (regs.stopped && currprefs.cpu_idle) { + // CPU in STOP state: sleep if enough time left. + frame_time_t rpt = read_processor_time(); + while (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase) { + maybe_process_pull_audio(); +// if (!execute_other_cpu(rpt + vsynctimebase / 10)) { + if (cpu_sleep_millis(1) < 0) + break; +// } + rpt = read_processor_time(); + } + } else if (currprefs.m68k_speed_throttle) { + vsyncmintime = read_processor_time(); /* end of CPU emulation time */ + events_reset_syncline(); + maybe_process_pull_audio(); + } else { + vsyncmintime = vsyncmaxtime; /* emulate if still time left */ + is_syncline_end = read_processor_time() + vsynctimebase; /* far enough in future, we never wait that long */ + is_syncline = -12; + maybe_process_pull_audio(); + } + } else { + static int linecounter; + /* end of scanline, run cpu emulation as long as we still have time */ + vsyncmintime += vsynctimeperline; + linecounter++; + int maxlc = 8; + events_reset_syncline(); + if (vsync_isdone(NULL) <= 0 && !currprefs.turbo_emulation && (linecounter & (maxlc - 1)) == 0) { + if (vsyncmaxtime - vsyncmintime > 0) { + if (vsyncwaittime - vsyncmintime > 0) { + frame_time_t rpt = read_processor_time(); + /* Extra time left? Do some extra CPU emulation */ + if (vsyncmintime - rpt > 0) { + if (regs.stopped && currprefs.cpu_idle && sleeps_remaining > 0) { + // STOP STATE: sleep. + cpu_sleep_millis(1); + sleeps_remaining--; + maybe_process_pull_audio(); + } else { + is_syncline = -11; + /* limit extra time */ + is_syncline_end = rpt + vsynctimeperline * maxlc; + } + } + } + } + } + maybe_process_pull_audio(); + } + + } else if (!currprefs.cpu_thread) { + + // the rest + static int linecounter; + static int nextwaitvpos; + int maxlc = 16; + linecounter++; + if (vpos == 0) + nextwaitvpos = maxvpos_display * 1 / 4; + if (audio_is_pull() > 0 && !currprefs.turbo_emulation && (linecounter & (maxlc - 1)) == 0) { + maybe_process_pull_audio(); + frame_time_t rpt = read_processor_time(); + while (audio_pull_buffer() > 1 && (!isvsync() || (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase))) { + cpu_sleep_millis(1); + maybe_process_pull_audio(); + rpt = read_processor_time(); + } + } + if (linear_vpos + 1 < maxvpos + lof_store && linear_vpos >= nextwaitvpos && linear_vpos < maxvpos - (maxvpos / 3) && (audio_is_pull() <= 0 || (audio_is_pull() > 0 && audio_pull_buffer()))) { + nextwaitvpos += maxvpos_display * 1 / 3; + vsyncmintime += vsynctimeperline; + if (vsync_isdone(NULL) <= 0 && !currprefs.turbo_emulation) { + frame_time_t rpt = read_processor_time(); + // sleep if more than 2ms "free" time + while (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase) { + maybe_process_pull_audio(); +// if (!execute_other_cpu(rpt + vsynctimebase / 10)) { + if (cpu_sleep_millis(1) < 0) + break; +// } + rpt = read_processor_time(); + } + } + } } -} -static void event_doint_delay_do_intena(uae_u32 v) -{ - setclr(&intena2, v); + if (!input_read_done) { + inputdevice_hsync(false); + } - doint(); -} + //reset_decisions_scanline_start(); -static void doint_delay_intena(uae_u16 v) -{ - if (m68k_interrupt_delay) { - // INTREQ or INTENA write: IPL line changes 0.5 CCKs later. - // 68000 needs one more CPU clock (0.5 CCK) before it detects it. - event2_newevent_xx(-1, 1 * CYCLE_UNIT, v, event_doint_delay_do_intena); + rethink_uae_int(); + + /* See if there's a chance of a copper wait ending this line. */ + compute_spcflag_copper(); + + // check reset and process it immediately, don't wait for vsync + if (quit_program == -UAE_RESET || quit_program == -UAE_RESET_KEYBOARD || quit_program == -UAE_RESET_HARD) { + quit_program = -quit_program; + set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); } - else { - event_doint_delay_do_intena(v); + + +#if 0 + /* fastest possible + last line and no vflip wait: render the frame as early as possible */ + if (is_last_line () && isvsync_chipset () <= -2 && !vsync_rendered && currprefs.gfx_apmode[0].gfx_vflip == 0) { + frame_time_t start, end; + start = read_processor_time (); + vsync_rendered = true; + vsync_handle_redraw (lof_store, lof_changed, bplcon0, bplcon3); + if (vblank_hz_state) { + frame_rendered = crender_screen(1, true); + } + end = read_processor_time (); + frameskiptime += end - start; } +#endif + + rtg_vsynccheck (); + } -static void INTENA(uae_u16 v) +static bool vsync_line; +// executed at start of scanline +static void hsync_handler(bool vs) { - uae_u16 old = intena; - setclr(&intena, v); + display_last_hsync = get_cycles(); + + hsync_handler_pre(vs); + if (vs) { + devices_vsync_pre(); + if (savestate_check()) { + uae_reset(0, 0); + return; + } - if (old != intena) { - doint_delay_intena(v); } -} + if (vpos == vsync_startline + 1 && !maxvpos_display_vsync_next) { + inputdevice_read_msg(true); + vsync_display_render(); + vsync_display_rendered = false; + if (currprefs.cs_hvcsync == 0) { + if (beamcon0 & (BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) { + lof_display = lof_pdetect; + } else { + lof_display = lof_detect; + } + } else if (currprefs.cs_hvcsync == 1) { + if (beamcon0 & BEAMCON0_VARCSYEN) { + lof_display = lof_pdetect; + } else { + lof_display = lof_detect; + } + } else if (currprefs.cs_hvcsync == 2) { + if (beamcon0 & BEAMCON0_VARVSYEN) { + lof_display = lof_pdetect; + } else { + lof_display = lof_detect; + } + } + reset_autoscale(); + display_vsync_counter++; + maxvpos_display_vsync_next = true; + display_hsync_counter = 0; + display_last_vsync = get_cycles(); + } else if (vpos != vsync_startline + 1 && maxvpos_display_vsync_next) { + // protect against weird VPOSW writes causing continuous vblanks + maxvpos_display_vsync_next = false; + } else { + display_hsync_counter++; + if (display_hsync_counter > maxvpos) { + display_hsync_counter = 0; + inputdevice_read_msg(true); + vsync_display_render(); + vsync_display_rendered = false; + } -static void INTREQ_nodelay(uae_u16 v) -{ - uae_u16 old = intreq; - setclr(&intreq, v); - intreq2 = intreq; - intreq_checks(old, intreq); - doint(); + } + vsync_line = vs; + hsync_handler_post(vs); } -void INTREQ_f(uae_u16 v) +static void audio_evhandler2(void) { - uae_u16 old = intreq; - setclr(&intreq, v); - intreq2 = intreq; - intreq_checks(old, intreq); + audio_evhandler(); } -bool INTREQ_0(uae_u16 v) -{ - uae_u16 old = intreq; - setclr(&intreq, v); - - if (old != intreq) { - doint_delay_intreq(v); - intreq_checks(old, intreq); - } - return true; -} +static void sync_evhandler(void); -void INTREQ(uae_u16 data) +void init_eventtab(void) { - if (INTREQ_0(data)) { - rethink_intreq(); + if (!savestate_state) { + clear_events(); } + + eventtab[ev_cia].handler = CIA_handler; + eventtab[ev_misc].handler = MISC_handler; + eventtab[ev_audio].handler = audio_evhandler2; + eventtab[ev_sync].handler = sync_evhandler; + + eventtab2[ev2_blitter].handler = blitter_handler; + + events_schedule(); } -static void ADKCON(int hpos, uae_u16 v) +void custom_prepare(void) { - if (currprefs.produce_sound > 0) { - update_audio(); - } - DISK_update(hpos); - DISK_update_adkcon(hpos, v); - setclr(&adkcon, v); - DISK_update_predict(); - audio_update_adkmasks(); -#ifdef SERIAL_PORT - if ((v >> 11) & 1) { - serial_uartbreak((adkcon >> 11) & 1); - } -#endif + hsync_handler_post(true); } -static void check_harddis(void) +void custom_cpuchange(void) { - // VARBEAMEN, HARDDIS, SHRES, UHRES - harddis_h = ecs_agnus && ((new_beamcon0 & BEAMCON0_VARBEAMEN) || (new_beamcon0 & BEAMCON0_HARDDIS) || (bplcon0 & 0x0040) || (bplcon0 & 0x0080)); - // VARBEAMEN, VARVBEN, HARDDIS - harddis_v = ecs_agnus && ((new_beamcon0 & BEAMCON0_VARBEAMEN) || (new_beamcon0 & BEAMCON0_VARVBEN) || (new_beamcon0 & BEAMCON0_HARDDIS)); + // both values needs to be same but also different + // after CPU mode changes + intreq = intreq | 0x8000; + intena = intena | 0x8000; + intreq2 = intreq; + intena2 = intena; } -static void BEAMCON0(int hpos, uae_u16 v) + +void custom_reset(bool hardreset, bool keyboardreset) { - if (ecs_agnus) { - bool beamcon0_changed = false; - if (v != new_beamcon0) { - sync_changes(hpos); - new_beamcon0 = v; - write_log(_T("BEAMCON0 = %04X, PC=%08X\n"), v, M68K_GETPC); - // not LPENDIS, LOLDIS, PAL, BLANKEN, SYNC INVERT - if (v & ~(BEAMCON0_LPENDIS | BEAMCON0_LOLDIS | BEAMCON0_PAL | BEAMCON0_BLANKEN | BEAMCON0_CSYTRUE | BEAMCON0_VSYTRUE | BEAMCON0_HSYTRUE)) { - dumpsync(); - } - beamcon0_changed = true; - beamcon0_saved = v; - record_register_change(hpos, 0x1dc, new_beamcon0); - check_harddis(); - calcdiw(); - vb_check(); - decide_vline(hpos); - } - if (beamcon0_changed) { - init_beamcon0(false); - } - } -} - -static void varsync(int reg, bool resync, int oldval) -{ - struct amigadisplay *ad = &adisplays[0]; - if (!ecs_agnus) { - return; - } -#ifdef PICASSO96 - if (ad->picasso_on && p96refresh_active) { - vtotal = p96refresh_active; - return; + if (hardreset) { + board_prefs_changed(-1, -1); + initial_frame = true; } -#endif - thisline_changed = 1; - updateextblk(); - // VB - if ((reg == 0x1cc || reg == 0x1ce) && (beamcon0 & BEAMCON0_VARVBEN)) { - // check for >1 because of interlace modes - if ((reg == 0x1cc && abs(vbstrt - oldval) > 1) || (reg == 0x1ce && abs(vbstop - oldval) > 1)) { - // check VB changes only if there are not many changes per frame - varsync_maybe_changed[reg == 0x1cc ? 0 : 1]++; - } - } - // HB - if ((reg == 0x1c4 || reg == 0x1c6) && exthblank) { - // only do resync if HB value has been valid at least 66% of field - varhblank_lines = (maxvpos / 3) * 2; - } + target_reset(); + devices_reset(hardreset); + write_log(_T("Reset at %08X. Chipset mask = %08X\n"), M68K_GETPC, currprefs.chipset_mask); + memory_map_dump(); - if (!resync) { - return; - } + rga_slot_first_offset = 0; + rga_slot_in_offset = 1; + rga_slot_out_offset = 2; - // TOTAL - if ((reg == 0x1c0 || reg == 0x1c8) && (beamcon0 & BEAMCON0_VARBEAMEN)) { - varsync_changed = 1; - nosignal_trigger = true; - } - // VB - if ((reg == 0x1cc || reg == 0x1ce) && (beamcon0 & BEAMCON0_VARVBEN)) { - varsync_changed = 1; - } - // VS - if ((reg == 0x1e0 || reg == 0x1ca) && (beamcon0 & bemcon0_vsync_mask)) { - varsync_changed = 1; - nosignal_trigger = true; - } - // HS - if ((reg == 0x1de || reg == 0x1c2) && (beamcon0 & bemcon0_hsync_mask)) { - varsync_changed = 1; + for(int i = 0; i < DENISE_RGA_SLOT_TOTAL; i++) { + struct denise_rga *r = &rga_denise[i]; + memset(r, 0, sizeof(struct denise_rga)); } - - if (varsync_changed) { - varsync_maybe_changed[0] = 0; - varsync_maybe_changed[1] = 0; + preg.p = NULL; + for (int i = 0 ; i < MAX_PIPELINE_REG; i++) { + struct pipeline_func *p = &pfunc[i]; + memset(p, 0, sizeof(struct pipeline_func)); } + rga_denise_cycle = 0; + rga_denise_cycle_start = 0; + rga_denise_cycle_count = 0; + rga_denise_cycle_line = 1; - if (varsync_changed) { - init_beamcon0(false); - } -} + vsync_startline = 3; + copper_dma_change_cycle = 0; + blitter_dma_change_cycle = 0; + sprite_dma_change_cycle_on = 0; -#ifdef PICASSO96 -void set_picasso_hack_rate(int hz) -{ - struct amigadisplay *ad = &adisplays[0]; - if (!ad->picasso_on) - return; - vpos_count = 0; - p96refresh_active = (int)(maxvpos_stored * vblank_hz_stored / hz); - if (!currprefs.cs_ciaatod) - changed_prefs.cs_ciaatod = currprefs.cs_ciaatod = currprefs.ntscmode ? 2 : 1; - if (p96refresh_active > 0) { - new_beamcon0 |= BEAMCON0_VARBEAMEN; - } - varsync_changed = 1; -} -#endif + pipelined_write_addr = 0x1fe; + prev_strobe = 0x3c; + dmal_next = false; -/* "Dangerous" blitter D-channel: Writing to memory which is also currently - * read by bitplane DMA - */ -static void dcheck_is_blit_dangerous(void) -{ - check_is_blit_dangerous(bplpt, bplcon0_planes, 50 << bplcon0_res); -} + bool ntsc = currprefs.ntscmode; -static void BPLxPTH(int hpos, uae_u16 v, int num) -{ - decide_line(hpos); - decide_fetch_safe(hpos); - if (copper_access) { - int n = get_bitplane_dma_rel(hpos, 1); - if (n == num + 1) { - SET_LINE_CYCLEBASED(hpos); - return; - } - } + lightpen_active = 0; + lightpen_triggered = 0; + lightpen_cx[0] = lightpen_cy[0] = -1; + lightpen_cx[1] = lightpen_cy[1] = -1; + lightpen_x[0] = -1; + lightpen_y[0] = -1; + lightpen_x[1] = -1; + lightpen_y[1] = -1; + memset(custom_storage, 0, sizeof(custom_storage)); + //update_denise_vars(); + exthblank = false; + display_reset = 1; + vt_old = 0; + ht_old = 0; + maxvpos_display_vsync_next = false; + programmed_register_accessed = false; + denise_reset(false); + + agnus_hpos_next = -1; + agnus_vpos_next = -1; + agnus_pos_change = 0; + hsync_counter = 0; + vsync_counter = 0; + display_vsync_counter = 0; + display_hsync_counter = 0; + display_last_hsync = get_cycles(); + display_last_vsync = get_cycles(); + next_lineno = 0; - bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16); - bplptx[num] = (bplptx[num] & 0x0000ffff) | ((uae_u32)v << 16); - dcheck_is_blit_dangerous (); - //write_log (_T("%d:%d:BPL%dPTH %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip); -} -static void BPLxPTL(int hpos, uae_u16 v, int num) -{ - decide_line(hpos); - decide_fetch_safe(hpos); - /* only detect copper accesses to prevent too fast CPU mode glitches */ - if (copper_access) { - int n = get_bitplane_dma_rel(hpos, 1); - if (n == num + 1) { - SET_LINE_CYCLEBASED(hpos); - return; - } - } - bplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe); - bplptx[num] = (bplptx[num] & 0xffff0000) | (v & 0x0000fffe); - dcheck_is_blit_dangerous (); - //write_log (_T("%d:%d:BPL%dPTL %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip); -} + agnus_hpos = 0; + agnus_hpos_prev = 0; + agnus_hpos_next = 1; + agnus_vpos_next = 0; + vpos_prev = 0; + agnus_pos_change = -2; + vpos_lpen = -1; -static void BPLCON0_Denise(int hpos, uae_u16 v) -{ - v = BPLCON0_Denise_mask(v); + uhres_state = 0; + uhres_bpl = false; + uhres_spr = false; - if (bplcon0d == v && !bplcon0d_change) { - return; - } - bplcon0d_change = false; + dmal_shifter = 0; + dmal = 0; - // fake unused 0x0080 bit as an EHB bit (see below) - if (isehb(bplcon0d, bplcon2)) { - v |= 0x0080; - } + nosignal_cnt = 0; + nosignal_status = 0; + nosignal_trigger = false; - record_register_change(hpos, 0x101, v); + irq_forced_delay = 0; + irq_forced = 0; - bplcon0d = v & ~0x0080; - bplcon0d_old = -1; + agnus_phsync = agnus_phblank = false; + agnus_pvsync = agnus_pcsync = agnus_csync = false; + agnus_vb = agnus_pvb = 0; + agnus_vb_active = false; + agnus_equzone = false; + agnus_hsync = agnus_vsync = agnus_ve = agnus_p_ve = false; + agnus_equdis = false; + agnus_bsvb = true; -#ifdef ECS_DENISE - if (ecs_denise) { - decide_sprites(hpos); - sprres = expand_sprres(v, bplcon3); - } -#endif - if (thisline_decision.plfleft < 0) { - update_denise(hpos); + if (hardreset || savestate_state) { + maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; + maxhpos_short = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; + maxvpos = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; + maxvpos_nom = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; + maxvpos_display = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; } -} -static void bpldmainit(int hpos, uae_u16 bplcon0) -{ - BPLCON0_Denise(hpos, bplcon0); - setup_fmodes(hpos, bplcon0); -} + if (!savestate_state) { + cia_hsync = 0; + extra_cycle = 0; + currprefs.chipset_mask = changed_prefs.chipset_mask; + vdiwstate = diw_states::DIW_waiting_start; + blitter_reset(); + denise_reset(true); -static void BPLCON0(int hpos, uae_u16 v); + lol = false; -static void bplcon0_denise_reschange(int res, int oldres) -{ - flush_display(fetchmode); + for(int i = 0; i < RGA_SLOT_TOTAL + 1; i++) { + struct rgabuf *r = &rga_pipe[i]; + memset(r, 0, sizeof(struct rgabuf)); + r->reg = 0x1fe; + } - toscr_res = res; - toscr_res_old = res; - update_toscr_vars(); - compute_toscr_delay(bplcon1); + if (hardreset) { - if (aga_mode) { - if (oldres == RES_LORES && res == RES_HIRES) { - toscr_special_skip_ptr = toscr_spc_aga_lores_to_hires; - } - if (oldres == RES_HIRES && res == RES_LORES) { - toscr_special_skip_ptr = toscr_spc_aga_hires_to_lores; - } - } else if (0 && ecs_denise) { - if (oldres == RES_LORES && res == RES_HIRES) { - toscr_special_skip_ptr = toscr_spc_ecs_lores_to_hires; - } - if (oldres == RES_HIRES && res == RES_LORES) { - toscr_special_skip_ptr = toscr_spc_ecs_hires_to_lores; - } - } else if (1) { - if (oldres == RES_LORES && res == RES_HIRES) { - toscr_special_skip_ptr = toscr_spc_ocs_lores_to_hires; - } - if (oldres == RES_HIRES && res == RES_LORES) { - toscr_special_skip_ptr = toscr_spc_ocs_hires_to_lores; + vtotal = MAXVPOS_LINES_ECS - 1; + htotal = MAXHPOS_ROWS - 1; + hbstrt = 0xffff; + hbstop = 0xffff; + hbstrt_cck = 0xff; + hbstop_cck = 0xff; + hsstrt = 0; // jtxrules / illusion assumes HSSTRT==0! + hsstop = 0; + vbstrt = 0xffff; + vbstop = 0xffff; + vsstrt = 0xffff; + vsstop = 0xffff; + hcenter = 0xffff; + +#if 0 + for (int i = 0; i < 32; i++) { + uae_u16 c; + if (i == 0) { + c = ((ecs_denise && !aga_mode) || denisea1000) ? 0xfff : 0x000; + } else { + c |= uaerand(); + c |= uaerand(); + } + c &= 0xfff; + denise_colors.color_regs_ecs[i] = c; + } + for (int i = 0; i < 256; i++) { + uae_u32 c = 0; + if (i > 0) { + c |= uaerand(); + c |= uaerand(); + } + c &= 0xffffff; + denise_colors.color_regs_aga[i] = c; + } + if (!aga_mode) { + for (int i = 0; i < 32; i++) { + denise_colors.acolors[i] = getxcolor(denise_colors.color_regs_ecs[i]); + } +#ifdef AGA + } else { + for (int i = 0; i < 256; i++) { + denise_colors.acolors[i] = getxcolor(denise_colors.color_regs_aga[i]); + } +#endif + } +#endif + lof_store = lof_display = 0; } - } -} -static void bplcon0_denise_change_early(int hpos, uae_u16 con0) -{ - uae_u16 dcon0 = BPLCON0_Denise_mask(con0); - uae_u16 dcon0o = BPLCON0_Denise_mask(bplcon0); + clxdat = 0; - int np = GET_PLANES(dcon0); - int res = GET_RES_DENISE(dcon0); - if (bplcon0d != dcon0) { - bplcon0d = dcon0; - bplcon0d_change = true; - } - if (np == toscr_nr_planes_shifter_new) { - toscr_nr_planes_shifter = np; - } else { - bplcon0_planes_changed = true; - } - - decide_hdiw(hpos); - SET_LINE_CYCLEBASED(hpos); + /* Clear the armed flags of all sprites. */ + memset(spr, 0, sizeof spr); - if (aga_mode) { - int e1 = isehb(dcon0, bplcon2); - int e2 = isehb(dcon0o, bplcon2); - if (e1 ^ e2) { - record_register_change(hpos, 0x201, dcon0); - } - } + dmacon = 0; + intreq = intreq2 = 0; + intena = intena2 = 0; - toscr_nr_planes_shifter_new = np; - if (ecs_denise || aga_mode) { - toscr_nr_changed = np != toscr_nr_planes3 && res == toscr_res; - } - toscr_nr_planes3 = np; + copcon = 0; + DSKLEN(0, 0); - if (currprefs.chipset_hr && res != toscr_res) { - bplcon0_denise_reschange(res, toscr_res); - } + bplcon0 = 0; + bplcon4 = 0x0011; /* Get AGA chipset into ECS compatibility mode */ + bplcon3 = 0x0C00; + + diwhigh = 0; + diwhigh_written = 0; + hdiwstate = diw_states::DIW_waiting_start; // this does not reset at vblank - if (isocs7planes()) { - if (toscr_nr_planes_shifter_new < 6) { - toscr_nr_planes_shifter_new = 6; + refptr = 0; + if (aga_mode) { + refptr = 0x1ffffe; } - } + refptr_p = refptr; + FMODE(0); + CLXCON(0); + CLXCON2(0); + setup_fmodes(bplcon0); + beamcon0 = new_beamcon0 = beamcon0_saved = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; + blt_info.blit_main = 0; + blt_info.blit_pending = 0; + blt_info.blit_interrupt = 1; + blt_info.blit_queued = 0; + //init_sprites(); - if (np > toscr_nr_planes2) { - update_toscr_planes(np, fetchmode); - toscr_nr_planes2 = np; - thisline_decision.max_planes = np; - } -} + maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; + maxhpos_short = maxhpos; + updateextblk(); -static void BPLCON0(int hpos, uae_u16 v) -{ - uae_u16 old = bplcon0; - bplcon0_saved = v; - v = BPLCON0_Agnus_mask(v); + bplcon0_saved = bplcon0; + bplcon1_saved = bplcon1; + bplcon2_saved = bplcon2; + bplcon3_saved = bplcon3; + bplcon4_saved = bplcon4; + ddfstrt_saved = ddfstrt; + ddfstop_saved = ddfstop; + diwhigh_saved = diwhigh; + fmode_saved = fmode; + beamcon0_saved = new_beamcon0; -#if SPRBORDER - v |= 1; -#endif - if (bplcon0 == v) { - return; + if (currprefs.cs_compatible == CP_DRACO || currprefs.cs_compatible == CP_CASABLANCA) { + // fake draco interrupts + INTENA(0x8000 | 0x4000 | 0x1000 | 0x2000 | 0x0080 | 0x0010 | 0x0008 | 0x0001); + } } - decide_hdiw(hpos); - SET_LINE_CYCLEBASED(hpos); + specialmonitor_reset(); + update_mirrors(); - if ((v & 1) != (bplcon0 & 1)) { - sync_color_changes(hpos); - } + unset_special(~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE | SPCFLAG_CHECK)); - if (!issyncstopped()) { - vpos_previous = vpos; - hpos_previous = hpos; - } + inputdevice_reset(); + timehack_alive = 0; - if (v & 4) { - bplcon0_interlace_seen = true; - } + //vdiw_change(0); + check_harddis(); - if ((v & 8) && !lightpen_triggered && vb_state) { - // setting lightpen bit immediately freezes VPOSR if inside vblank and not already frozen - hhpos_lpen = HHPOSR(); - lightpen_triggered = 1; - vpos_lpen = vpos; - hpos_lpen = hpos; - } - if (!(v & 8)) { - // clearing lightpen bit immediately returns VPOSR back to normal - lightpen_triggered = 0; + init_hz_reset(); + lof_changing = 0; + + audio_reset(); + cop_state.strobe_next = COP_stop; + if (!isrestore()) { + memset(&cop_state, 0, sizeof(cop_state)); + cop_state.state = COP_stop; + /* must be called after audio_reset */ + adkcon = 0; +#ifdef SERIAL_PORT + serial_uartbreak(0); +#endif + audio_update_adkmasks(); } - bplcon0 = v; + //init_hardware_frame(); + drawing_init(); - check_harddis(); + //reset_decisions_scanline_start(); + //reset_decisions_hsync_start(); - if ((old & 1) != (bplcon0 & 1)) { - updateextblk(); - } + bogusframe = 1; + vsync_rendered = false; + frame_shown = false; + frame_rendered = false; - bpldmainit(hpos, bplcon0); + if (isrestore()) { + uae_u16 v; + uae_u32 vv; - if (!copper_access) { - bplcon0_denise_change_early(hpos, bplcon0); - } -} + // preset position to last end of last line + // so that first VB and COPJMP happens correctly + vpos = maxvpos + lof_store - 1; + vpos_prev = vpos - 1; + agnus_hpos = 0; + agnus_vb = agnusa1000 ? false : true; -static void BPLCON1(int hpos, uae_u16 v) -{ - bplcon1_saved = v; - if (!aga_mode) { - v &= 0xff; - } - if (bplcon1 == v) { - return; - } - SET_LINE_CYCLEBASED(hpos); - bplcon1_written = true; - bplcon1 = v; - hack_shres_delay(hpos); -} + audio_update_adkmasks(); + INTENA(0); + INTREQ(0); + v = bplcon0; + BPLCON0(0); + BPLCON0(v); + FMODE(fmode); + setup_fmodes(bplcon0); + if (!aga_mode) { + for(int i = 0 ; i < 32 ; i++) { + vv = denise_colors.color_regs_ecs[i]; + denise_colors.color_regs_ecs[i] = -1; + denise_colors.color_regs_ecs[i] = vv; + denise_colors.acolors[i] = xcolors[vv]; + } +#ifdef AGA + } else { + for(int i = 0 ; i < 256 ; i++) { + vv = denise_colors.color_regs_aga[i]; + denise_colors.color_regs_aga[i] = -1; + denise_colors.color_regs_aga[i] = vv; + if (i < 32) { + saved_color_regs_aga[i] = vv; + } + denise_colors.acolors[i] = CONVERT_RGB(vv); + } +#endif + } + CLXCON(clxcon); + CLXCON2(clxcon2); +#ifdef SERIAL_PORT + v = serper; + serper = 0; + SERPER(v); +#endif + if (beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_CSCBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN | BEAMCON0_VARBEAMEN | BEAMCON0_DUAL | BEAMCON0_BLANKEN)) { + programmed_register_accessed = true; + dumpsync(); + } -static void BPLCON2(int hpos, uae_u16 v) -{ - bplcon2_saved = v; - if (!aga_mode) { - v &= ~(0x100 | 0x80); // RDRAM and SOGEN - } - if (!ecs_denise) { - v &= 0x7f; - } - v &= ~0x8000; // unused - if (bplcon2 == v) { - return; - } - decide_line(hpos); - bplcon2 = v; - record_register_change(hpos, 0x104, bplcon2); -} + for (int i = 0; i < 8; i++) { + SPRxCTLPOS(i); + } + if (!currprefs.produce_sound) { + eventtab[ev_audio].active = 0; + events_schedule(); + } -#ifdef ECS_DENISE -static void BPLCON3(int hpos, uae_u16 v) -{ - uae_u16 old = bplcon3; - bplcon3_saved = v; - if (!ecs_denise) { - return; - } - if (!aga_mode) { - v &= (0x0020 | 0x0010 | 0x004 | 0x001); - v |= 0x0c00; + write_log(_T("CPU=%d Chipset=%s %s\n"), + currprefs.cpu_model, + (aga_mode ? _T("AGA") : + (ecs_agnus && ecs_denise ? _T("Full ECS") : + (ecs_denise ? _T("ECS Denise") : + (ecs_agnus ? _T("ECS") : _T("OCS"))))), + currprefs.ntscmode ? _T("NTSC") : _T("PAL")); + write_log(_T("State restored\n")); } -#if SPRBORDER - v |= 2; + + sprite_width = GET_SPRITEWIDTH(fmode); + setup_fmodes(bplcon0); + +#ifdef ACTION_REPLAY + /* Doing this here ensures we can use the 'reset' command from within AR */ + action_replay_reset(hardreset, keyboardreset); #endif - if (bplcon3 == v) { - return; - } - decide_line(hpos); - decide_sprites(hpos); - if ((bplcon3 & 1) != (v & 1)) { - sync_color_changes(hpos); - } - bplcon3 = v; - if ((bplcon3 & 1) != (old & 1)) { - updateextblk(); +#if defined(ENFORCER) + enforcer_disable(); +#endif + + if (hardreset) { + rtc_hardreset(); } - sprres = expand_sprres(bplcon0, bplcon3); - record_register_change(hpos, 0x106, v); -} + + // must be last +#ifdef AUTOCONFIG + expamem_reset(hardreset); #endif -#ifdef AGA -static void BPLCON4(int hpos, uae_u16 v) +} + +void custom_dumpstate(int mode) { - bplcon4_saved = v; - if (!aga_mode) { - return; - } - if (bplcon4 == v) { - return; + if (!mode) { + console_out_f(_T("VPOS: %03d ($%03x) HPOS: %03d ($%03x) COP: $%08x\n"), + vpos, vpos, current_hpos(), current_hpos(), + cop_state.ip); } - decide_line(hpos); - record_register_change(hpos, 0x10c, v); - bplcon4 = v; } -#endif -static void BPL1MOD(int hpos, uae_u16 v) +void dumpcustom(void) { - v &= ~1; - decide_line(hpos); - decide_fetch_safe(hpos); - bpl1mod_prev = bpl1mod; - bpl1mod_hpos = hpos + 1; - if (bpl1mod_hpos >= maxhpos) { - bpl1mod_hpos -= maxhpos; + console_out_f(_T("DMACON: $%04x INTENA: $%04x ($%04x) INTREQ: $%04x ($%04x) VPOS: %03d ($%03x) HPOS: %03d ($%03x)\n"), + DMACONR(), + intena, intena, intreq, intreq, vpos, vpos, current_hpos(), current_hpos()); + console_out_f(_T("INT: $%04x IPL: %d\n"), intena & intreq, intlev()); + console_out_f(_T("COP1LC: $%08x, COP2LC: $%08x COPPTR: $%08x\n"), cop1lc, cop2lc, cop_state.ip); + console_out_f(_T("DIWSTRT: $%04x DIWSTOP: $%04x DDFSTRT: $%04x DDFSTOP: $%04x\n"), + diwstrt, diwstop, ddfstrt, ddfstop); + console_out_f(_T("BPLCON 0: $%04x 1: $%04x 2: $%04x 3: $%04x 4: $%04x LOF=%d/%d HDIW=%d VDIW=%d\n"), + bplcon0, bplcon1, bplcon2, bplcon3, bplcon4, + lof_display, lof_store, + hdiwstate == diw_states::DIW_waiting_start ? 0 : 1, vdiwstate == diw_states::DIW_waiting_start ? 0 : 1); + if (timeframes && vsync_counter) { + console_out_f(_T("Average frame time: %.2f ms [frames: %d time: %d]\n"), + (double)frametime / timeframes, vsync_counter, frametime); + if (total_skipped) + console_out_f(_T("Skipped frames: %d\n"), total_skipped); } - bpl1mod = v; } -static void BPL2MOD(int hpos, uae_u16 v) +/* mousehack is now in "filesys boot rom" */ +static uae_u32 REGPARAM2 mousehack_helper_old(struct TrapContext *ctx) { - v &= ~1; - decide_line(hpos); - decide_fetch_safe(hpos); - bpl2mod_prev = bpl2mod; - bpl2mod_hpos = hpos + 1; - if (bpl2mod_hpos >= maxhpos) { - bpl2mod_hpos -= maxhpos; - } - bpl2mod = v; + return 0; } -/* Needed in special OCS/ECS "7-plane" mode, - * also handles CPU generated bitplane data - */ -static void BPLxDAT_next(uae_u32 vv) +int custom_init(void) { - int num = vv >> 16; - uae_u16 data = vv; - int hpos = current_hpos(); +#ifdef AUTOCONFIG + if (uae_boot_rom_type) { + uaecptr pos; + pos = here(); - decide_line(hpos); - decide_fetch_safe(hpos); - flush_display(fetchmode); - - fetched[num] = data; - if ((fmode & 3) == 3) { - fetched_aga[num] = ((uae_u64)last_custom_value << 48) | ((uae_u64)data << 32) | ((uae_u64)data << 16) | data; - } else if ((fmode & 3) == 2) { - fetched_aga[num] = ((uae_u32)last_custom_value << 16) | data; - } else if ((fmode & 3) == 1) { - fetched_aga[num] = ((uae_u32)data << 16) | data; - } else { - fetched_aga[num] = data; - } - - if (num == 0) { - // ECS/AGA: HSYNC start - 1: $0C is first possible. - if (hpos != hsyncstartpos_start_cycles - 1) { - beginning_of_plane_block(hpos); - bprun_pipeline_flush_delay = maxhpos; - if (bplcon0_planes_changed) { - flush_display(fetchmode); - toscr_nr_planes_shifter = toscr_nr_planes_shifter_new; - bplcon0_planes_changed = false; - } - } - } -} + org(rtarea_base + 0xFF70); + calltrap(deftrap(mousehack_helper_old)); + dw(RTS); -static void BPLxDAT(int hpos, int num, uae_u16 data) -{ - uae_u32 vv = (num << 16) | data; - if (!num) { - SET_LINE_CYCLEBASED(hpos); - } - event2_newevent_xx_ce(1 * CYCLE_UNIT, vv, BPLxDAT_next); -} + org(rtarea_base + 0xFFA0); + calltrap(deftrap(timehack_helper)); + dw(RTS); -static void DIWSTRT_next(uae_u32 v) -{ - int hpos = current_hpos(); - decide_hdiw(hpos); - decide_line(hpos); - diwhigh_written = 0; - diwstrt = v; - calcdiw(); -} -static void DIWSTRT(int hpos, uae_u16 v) -{ - if (diwstrt == v && !diwhigh_written) { - return; + org(pos); } - event2_newevent_xx_ce(1 * CYCLE_UNIT, v, DIWSTRT_next); -} +#endif -static void DIWSTOP_next(uae_u32 v) -{ - int hpos = current_hpos(); - decide_hdiw(hpos); - decide_line(hpos); - diwhigh_written = 0; - diwstop = v; - calcdiw(); -} -static void DIWSTOP(int hpos, uae_u16 v) -{ - if (diwstop == v && !diwhigh_written) { - return; - } - event2_newevent_xx_ce(1 * CYCLE_UNIT, v, DIWSTOP_next); -} + build_blitfilltable(); -static void DIWHIGH_next(uae_u32 v) -{ - int hpos = current_hpos(); - // DIWHIGH has 1.5CCK delay - decide_hdiw(hpos, true); - decide_line(hpos); - diwhigh_written = 1; - diwhigh = v; - calcdiw(); + drawing_init(); + + update_mirrors(); + create_cycle_diagram_table(); + + return 1; } -static void DIWHIGH(int hpos, uae_u16 v) + +/* Custom chip memory bank */ + +static uae_u32 REGPARAM3 custom_lget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 custom_wget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 custom_bget(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 custom_lgeti(uaecptr) REGPARAM; +static uae_u32 REGPARAM3 custom_wgeti(uaecptr) REGPARAM; +static void REGPARAM3 custom_lput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM3 custom_wput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM3 custom_bput(uaecptr, uae_u32) REGPARAM; + +addrbank custom_bank = { + custom_lget, custom_wget, custom_bget, + custom_lput, custom_wput, custom_bput, + default_xlate, default_check, NULL, NULL, _T("Custom chipset"), + custom_lgeti, custom_wgeti, + ABFLAG_IO, S_READ, S_WRITE, NULL, 0x1ff, 0xdff000 +}; + +static uae_u32 REGPARAM2 custom_wgeti(uaecptr addr) { - if (!ecs_agnus && !ecs_denise) { - return; - } - if (!aga_mode) { - v &= ~(0x0010 | 0x1000); - } - v &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040); - if (diwhigh_written && diwhigh == v) { - return; - } - event2_newevent_xx_ce(1 * CYCLE_UNIT, v, DIWHIGH_next); + if (currprefs.cpu_model >= 68020 && !currprefs.cpu_compatible) + return dummy_wgeti(addr); + return custom_wget(addr); } - -static void DDFSTRT(int hpos, uae_u16 v) +static uae_u32 REGPARAM2 custom_lgeti(uaecptr addr) { - v &= 0xfe; - if (!ecs_agnus) { - v &= 0xfc; - } - SET_LINE_CYCLEBASED(hpos); - ddfstrt = v; - calcdiw(); - // DDFSTRT modified when DDFSTRT==hpos: neither value matches - ddfstrt_hpos = hpos; + if (currprefs.cpu_model >= 68020 && !currprefs.cpu_compatible) + return dummy_lgeti(addr); + return custom_lget(addr); } -static void DDFSTOP(int hpos, uae_u16 v) +static uae_u32 REGPARAM2 custom_wget_1(int hpos, uaecptr addr, int noput, bool isbyte) { - v &= 0xfe; - if (!ecs_agnus) { - v &= 0xfc; - } - SET_LINE_CYCLEBASED(hpos); - plfstop_prev = plfstop; - ddfstop = v; - calcdiw(); - // DDFSTOP modified when DDFSTOP==hpos: old value matches - ddfstop_hpos = hpos; - estimate_last_fetch_cycle(hpos); -} + uae_u16 v = regs.chipset_latch_rw; + int missing; +#if CUSTOM_DEBUG > 2 + write_log (_T("%d:%d:wget: %04X=%04X pc=%p\n"), current_hpos(), vpos, addr, addr & 0x1fe, m68k_getpc ()); +#endif +#ifdef DEBUGGER + if (memwatch_access_validator) + debug_check_reg(addr, 0, 0); +#endif -static void FMODE(int hpos, uae_u16 v) -{ - if (!aga_mode) { - if (currprefs.monitoremu) { - specialmonitor_store_fmode(vpos, hpos, v); + addr &= 0xfff; + + switch (addr & 0x1fe) { + case 0x002: v = DMACONR(); break; + case 0x004: v = VPOSR(); break; + case 0x006: v = VHPOSR(); break; + + case 0x00A: v = JOY0DAT(); break; + case 0x00C: v = JOY1DAT(); break; + case 0x00E: v = CLXDAT(); break; + case 0x010: v = ADKCONR(); break; + + case 0x012: v = POT0DAT(); break; + case 0x014: v = POT1DAT(); break; + case 0x016: v = POTGOR(); break; +#ifdef SERIAL_PORT + case 0x018: v = SERDATR(); break; +#else + case 0x018: v = 0x3000 /* no data */; break; +#endif + case 0x01A: v = DSKBYTR(hpos); break; + case 0x01C: v = INTENAR(); break; + case 0x01E: v = INTREQR(); break; + case 0x07C: + v = DENISEID(&missing); + if (missing) + goto writeonly; + break; + + case 0x1DA: + if (!ecs_agnus) + goto writeonly; + v = HHPOSR(); + break; + + case 0x088: COPJMP(1, 0); break; + case 0x08a: COPJMP(2, 0); break; + +#ifdef AGA + case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: + case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: + case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: + case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: + case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: + case 0x1BC: case 0x1BE: + if (!aga_mode) + goto writeonly; + v = COLOR_READ((addr & 0x3E) / 2); + break; +#endif + + default: +writeonly:; + /* OCS/ECS: + * reading write-only register causes write with last value in chip + * bus (custom registers, chipram, slowram) + * and finally returns either all ones or something weird if DMA happens + * in next (or previous) cycle.. FIXME. + * + * OCS-only special case: DFF000 (BLTDDAT) will always return whatever was left in bus + * + * AGA: + * Can also return last CPU accessed value + * Remembers old regs.chipset_latch_rw + */ + v = regs.chipset_latch_rw; + if (!noput) { + int r; + uae_u16 l; + + if (aga_mode) { + l = 0; + } else { + // last chip bus value (read or write) is written to register + if (currprefs.cpu_compatible && currprefs.cpu_model == 68000) { + if (isbyte) + l = (regs.chipset_latch_rw << 8) | (regs.chipset_latch_rw & 0xff); + else + l = regs.chipset_latch_rw; + } else { + l = regs.chipset_latch_rw; + } + } +#ifdef DEBUGGER + debug_wputpeek(0xdff000 + addr, l); +#endif + r = custom_wput_1(addr, l, 1); + v = last_custom_value; + + // Don't do this: + // 000400c8 08f9 000a 00df f096 bset.b #$000a,$00dff096 + + evt_t cycs = get_cycles(); + if (cycs - CYCLE_UNIT == last_rga_cycle) { + v = regs.chipset_latch_rw; + } else { + v = 0xffff; + } + +#if 0 + // CPU gets back (OCS/ECS only): + // - if last cycle was DMA cycle: DMA cycle data + // - if last cycle was not DMA cycle: FFFF or some ANDed old data. + // + if (hpos == 0) { + int hp = maxhpos - 1; + c = cycle_line_slot_last & CYCLE_MASK; + bmdma = bitplane_dma_access(hp, 0); + } else { + int hp = hpos - 1; + c = cycle_line_slot[hp] & CYCLE_MASK; + bmdma = bitplane_dma_access(hp, 0); + } + if (aga_mode) { + if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) { + v = regs.chipset_latch_rw; + } else if (c == CYCLE_CPU) { + v = regs.db; + } else { + v = regs.chipset_latch_rw >> ((addr & 2) ? 0 : 16); + } + } else { + if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) { + v = regs.chipset_latch_rw; + } else { + // refresh checked because refresh cycles do not always + // set regs.chipset_latch_rw for performance reasons. + v = 0xffff; + } + } +#endif +#if CUSTOM_DEBUG > 0 + write_log(_T("%08X read = %04X. Value written=%04X PC=%08x\n"), 0xdff000 | addr, v, l, M68K_GETPC); +#endif + return v; } - fmode_saved = v; - v = 0; - } - v &= 0xC00F; - if (fmode == v) { - return; - } - SET_LINE_CYCLEBASED(hpos); - if (aga_mode) { - fmode_saved = v; } - set_chipset_mode(); - bpldmainit(hpos, bplcon0); - record_register_change(hpos, 0x1fc, fmode); + return v; } -static void FNULL(uae_u16 v) +static uae_u32 custom_wget2(uaecptr addr, bool byte) { + uae_u32 v; + int hpos = current_hpos(); + v = custom_wget_1(hpos, addr, 0, byte); +#ifdef ACTION_REPLAY +#ifdef ACTION_REPLAY_COMMON + addr &= 0x1fe; + ar_custom[addr + 0] = (uae_u8)(v >> 8); + ar_custom[addr + 1] = (uae_u8)(v); +#endif +#endif + return v; } -static void BLTADAT(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - blt_info.bltadat = v; -} -/* -* "Loading data shifts it immediately" says the HRM. Well, that may -* be true for BLTBDAT, but not for BLTADAT - it appears the A data must be -* loaded for every word so that AFWM and ALWM can be applied. -*/ -static void BLTBDAT(int hpos, uae_u16 v) +static uae_u32 REGPARAM2 custom_wget(uaecptr addr) { - maybe_blit(hpos, 0); - int shift = bltcon1 >> 12; - if (bltcon1 & 2) { - blt_info.bltbhold = (((uae_u32)v << 16) | blt_info.bltbold) >> (16 - shift); - } else { - blt_info.bltbhold = (((uae_u32)blt_info.bltbold << 16) | v) >> shift; + uae_u32 v; + + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) + return dummy_get(addr, 2, false, 0); + if (addr & 1) { +#ifdef DEBUGGER + debug_invalid_reg(addr, 2, 0); +#endif + /* think about move.w $dff005,d0.. (68020+ only) */ + addr &= ~1; + v = custom_wget2(addr, false) << 8; + v |= custom_wget2(addr + 2, false) >> 8; + return v; } - blt_info.bltbdat = v; - blt_info.bltbold = v; -} -static void BLTCDAT(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - blt_info.bltcdat = v; - reset_blit(0); -} -static void BLTAMOD(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 1); - blt_info.bltamod = (uae_s16)(v & 0xFFFE); - reset_blit(0); -} -static void BLTBMOD(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 1); - blt_info.bltbmod = (uae_s16)(v & 0xFFFE); - reset_blit(0); -} -static void BLTCMOD(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 1); - blt_info.bltcmod = (uae_s16)(v & 0xFFFE); - reset_blit(0); -} -static void BLTDMOD(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 1); - blt_info.bltdmod = (uae_s16)(v & 0xFFFE); - reset_blit(0); -} -static void BLTCON0(int hpos, uae_u16 v) -{ - maybe_blit (hpos, 2); - bltcon0 = v; - reset_blit(1); -} -/* The next category is "Most useless hardware register". -* And the winner is... */ -static void BLTCON0L(int hpos, uae_u16 v) -{ - if (!ecs_agnus) - return; // ei voittoa. - maybe_blit(hpos, 2); bltcon0 = (bltcon0 & 0xFF00) | (v & 0xFF); - reset_blit(0); -} -static void BLTCON1(int hpos, uae_u16 v) { - maybe_blit(hpos, 2); - bltcon1 = v; - reset_blit(2); -} -static void BLTAFWM(int hpos, uae_u16 v) { - maybe_blit(hpos, 2); - blt_info.bltafwm = v; - reset_blit(0); -} -static void BLTALWM(int hpos, uae_u16 v) { - maybe_blit(hpos, 2); - blt_info.bltalwm = v; - reset_blit(0); -} -static void setblitx(int hpos, int n) -{ - bltptxpos = (hpos + 1) % maxhpos; - bltptxc = copper_access ? n : -n; -} -static void BLTAPTH(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - bltptx = bltapt; - setblitx(hpos, 1); - bltapt = (bltapt & 0xffff) | ((uae_u32)v << 16); -} -static void BLTAPTL(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - bltptx = bltapt; - setblitx(hpos, 1); - bltapt = (bltapt & ~0xffff) | (v & 0xfffe); -} -static void BLTBPTH(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - bltptx = bltbpt; - bltptxpos = hpos; - bltptxc = copper_access ? 2 : -2; - bltbpt = (bltbpt & 0xffff) | ((uae_u32)v << 16); -} -static void BLTBPTL(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - bltptx = bltbpt; - setblitx(hpos, 2); - bltbpt = (bltbpt & ~0xffff) | (v & 0xfffe); + return custom_wget2(addr, false); } -static void BLTCPTH(int hpos, uae_u16 v) + +static uae_u32 REGPARAM2 custom_bget(uaecptr addr) { - maybe_blit(hpos, 0); - bltptx = bltcpt; - setblitx(hpos, 3); - bltcpt = (bltcpt & 0xffff) | ((uae_u32)v << 16); + uae_u32 v; + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) + return dummy_get(addr, 1, false, 0); +#ifdef DEBUGGER + debug_invalid_reg(addr, 1, 0); +#endif + v = custom_wget2(addr & ~1, true); + v >>= (addr & 1) ? 0 : 8; + return v; } -static void BLTCPTL(int hpos, uae_u16 v) + +static uae_u32 REGPARAM2 custom_lget(uaecptr addr) { - maybe_blit(hpos, 0); - bltptx = bltcpt; - setblitx(hpos, 3); - bltcpt = (bltcpt & ~0xffff) | (v & 0xfffe); + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) + return dummy_get(addr, 4, false, 0); + return ((uae_u32)custom_wget(addr) << 16) | custom_wget(addr + 2); } -static void BLTDPTH (int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - if (blt_info.blit_finald && copper_access) { - static int warned = 100; - if (warned > 0) { - warned--; - write_log("Possible Copper Blitter wait bug detected COP=%08x\n", cop_state.ip); - } - } - bltptx = bltdpt; - setblitx(hpos, 4); - bltdpt = (bltdpt & 0xffff) | ((uae_u32)v << 16); -} -static void BLTDPTL(int hpos, uae_u16 v) +static int custom_wput_agnus(int addr, uae_u32 value, int noget) { - maybe_blit(hpos, 0); + int hpos = agnus_hpos; - if (blt_info.blit_finald && copper_access) { - static int warned = 100; - if (warned > 0) { - warned--; - write_log("Possible Copper Blitter wait bug detected COP=%08x\n", cop_state.ip); - } - } - - bltptx = bltdpt; - setblitx(hpos, 4); - bltdpt = (bltdpt & ~0xffff) | (v & 0xfffe); -} - -static void BLTSIZE(int hpos, uae_u16 v) -{ - maybe_blit(hpos, 0); - blt_info.vblitsize = v >> 6; - blt_info.hblitsize = v & 0x3F; - if (!blt_info.vblitsize) { - blt_info.vblitsize = 1024; - } - if (!blt_info.hblitsize) { - blt_info.hblitsize = 64; - } - do_blitter(hpos, copper_access, copper_access ? cop_state.ip : M68K_GETPC); - dcheck_is_blit_dangerous(); -} + switch (addr) { + case 0x00E: CLXDAT(); break; -static void BLTSIZV(int hpos, uae_u16 v) -{ - if (!ecs_agnus) { - return; - } - maybe_blit(hpos, 0); - blt_info.vblitsize = v & 0x7FFF; - if (!blt_info.vblitsize) { - blt_info.vblitsize = 0x8000; - } -} + case 0x020: DSKPTH(value); break; + case 0x022: DSKPTL(value); break; + case 0x024: DSKLEN(value, hpos); break; + case 0x026: /* DSKDAT(value). Writing to DMA write registers won't do anything */; break; + case 0x028: REFPTR(hpos, value); break; + case 0x02A: VPOSW(value); break; + case 0x02C: VHPOSW(value); break; + case 0x02E: COPCON(value); break; +#ifdef SERIAL_PORT + case 0x030: SERDAT(value); break; + case 0x032: SERPER(value); break; +#else + case 0x030: break; + case 0x032: break; +#endif + case 0x034: POTGO(value); break; -static void BLTSIZH(int hpos, uae_u16 v) -{ - if (!ecs_agnus) { - return; - } - maybe_blit(hpos, 0); - blt_info.hblitsize = v & 0x7FF; - if (!blt_info.vblitsize) { - blt_info.vblitsize = 0x8000; - } - if (!blt_info.hblitsize) { - blt_info.hblitsize = 0x0800; - } - do_blitter(hpos, copper_access, copper_access ? cop_state.ip : M68K_GETPC); - dcheck_is_blit_dangerous(); -} + case 0x040: BLTCON0(value); break; + case 0x042: BLTCON1(value); break; -static void spr_arm(int num, int state) -{ -#if SPRITE_DEBUG > 0 - if (spr[num].armed != state) - write_log (_T("SPR%d ARM=%d\n"), num, state); -#endif - switch (state) { - case 0: - nr_armed -= spr[num].armed; - spr[num].armed = 0; - break; - default: - nr_armed += 1 - spr[num].armed; - spr[num].armed = 1; - break; - } -} + case 0x044: BLTAFWM(value); break; + case 0x046: BLTALWM(value); break; -static void sprstartstop(struct sprite *s) -{ - if (vb_state || vb_end_line) { - return; - } - if (vpos == s->vstart) { - s->dmastate = 1; - } - if (vpos == s->vstop) { - s->dmastate = 0; - s->dmacycle = 0; - } -} + case 0x050: BLTAPTH(value); break; + case 0x052: BLTAPTL(value); break; + case 0x04C: BLTBPTH(value); break; + case 0x04E: BLTBPTL(value); break; + case 0x048: BLTCPTH(value); break; + case 0x04A: BLTCPTL(value); break; + case 0x054: BLTDPTH(value); break; + case 0x056: BLTDPTL(value); break; -static void SPRxCTLPOS(int num) -{ - int sprxp; - struct sprite *s = &spr[num]; + case 0x058: BLTSIZE(hpos, value); break; - sprstartstop(s); - sprxp = (s->pos & 0xFF) * 2 + (s->ctl & 1); - sprxp <<= sprite_buffer_res; - s->dblscan = 0; - s->ecs_denise_hires = 0; - /* Quite a bit salad in this register... */ - if (0) { - } -#ifdef AGA - else if (aga_mode) { - sprxp |= ((s->ctl >> 3) & 3) >> (RES_MAX - sprite_buffer_res); - s->dblscan = s->pos & 0x80; - } -#endif -#ifdef ECS_DENISE - else if (ecs_denise && (s->ctl & 0x10)) { - // This bit only works as documented if superhires bitplane resolution. - // If bitplane resolution is lores or hires: sprite's first pixel row - // becomes transparent. - s->ecs_denise_hires = 1; - } -#endif - s->xpos = sprxp; - s->vstart = s->pos >> 8; - s->vstart |= (s->ctl & 0x04) ? 0x0100 : 0; - s->vstop = s->ctl >> 8; - s->vstop |= (s->ctl & 0x02) ? 0x100 : 0; - if (ecs_agnus) { - s->vstart |= (s->ctl & 0x40) ? 0x0200 : 0; - s->vstop |= (s->ctl & 0x20) ? 0x0200 : 0; - } - sprstartstop(s); -} + case 0x064: BLTAMOD(value); break; + case 0x062: BLTBMOD(value); break; + case 0x060: BLTCMOD(value); break; + case 0x066: BLTDMOD(value); break; -static void SPRxCTL_1(uae_u16 v, int num, int hpos) -{ - struct sprite *s = &spr[num]; - s->ctl = v; - spr_arm(num, 0); - SPRxCTLPOS(num); + case 0x070: BLTCDAT(value); break; + case 0x072: BLTBDAT(value); break; + case 0x074: BLTADAT(value); break; -#if 0 - if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { - if (s->ctl & (0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40)) { - write_log(_T("ECS sprite %04x\n"), s->ctl); - } -} -#endif -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dCTL %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n"), - vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC); - } -#endif + case 0x07E: DSKSYNC(hpos, value); break; -} -static void SPRxPOS_1(uae_u16 v, int num, int hpos) -{ - struct sprite *s = &spr[num]; + case 0x080: COP1LCH(value); break; + case 0x082: COP1LCL(value); break; + case 0x084: COP2LCH(value); break; + case 0x086: COP2LCL(value); break; - s->pos = v; - SPRxCTLPOS(num); -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dPOS %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n"), - vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC); - } -#endif -} -static void SPRxDATA_1(uae_u16 v, int num, int hpos) -{ - struct sprite *s = &spr[num]; - s->data[0] = v; -#ifdef AGA - if (aga_mode) { - s->data[1] = v; - s->data[2] = v; - s->data[3] = v; - s->width = sprite_width; - } -#endif - spr_arm(num, 1); -#if SPRITE_DEBUG >= 256 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dDATA %04X P=%06X D=%d A=%d PC=%x\n"), - vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC); - } -#endif -} -static void SPRxDATB_1(uae_u16 v, int num, int hpos) -{ - struct sprite *s = &spr[num]; - s->datb[0] = v; -#ifdef AGA - if (aga_mode) { - s->datb[1] = v; - s->datb[2] = v; - s->datb[3] = v; - s->width = sprite_width; - } -#endif -#if SPRITE_DEBUG >= 256 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dDATB %04X P=%06X D=%d A=%d PC=%x\n"), - vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC); - } -#endif -} + case 0x088: COPJMP(1, 0); break; + case 0x08A: COPJMP(2, 0); break; -// Undocumented AGA feature: if sprite is 64 pixel wide, SPRxDATx is written and next -// cycle is DMA fetch: sprite's first 32 pixels get replaced with bitplane data. -static void sprite_get_bpl_data(int hpos, struct sprite *s, uae_u16 *dat) -{ - int nr = get_bitplane_dma_rel(hpos, 1); - uae_u32 v = (uae_u32)((fmode & 3) ? fetched_aga[nr] : fetched_aga_spr[nr]); - dat[0] = v >> 16; - dat[1] = (uae_u16)v; -} + case 0x08E: DIWSTRT(value); break; + case 0x090: DIWSTOP(value); break; + case 0x092: DDFSTRT(value); break; + case 0x094: DDFSTOP(value); break; -/* - SPRxDATA and SPRxDATB is moved to shift register when SPRxPOS matches. + case 0x096: DMACON(hpos, value); break; + case 0x09A: INTENA(value); break; + case 0x09C: INTREQ(value); break; + case 0x09E: ADKCON(hpos, value); break; - When copper writes to SPRxDATx exactly when SPRxPOS matches: - - If sprite low x bit (SPRCTL bit 0) is not set, shift register copy - is done first (previously loaded SPRxDATx value is shown) and then - new SPRxDATx gets stored for future use. - - If sprite low x bit is set, new SPRxDATx is stored, then SPRxPOS - matches and value written to SPRxDATx is visible. + case 0x0A0: AUDxLCH(0, value); break; + case 0x0A2: AUDxLCL(0, value); break; + case 0x0A4: AUDxLEN(0, value); break; + case 0x0A6: AUDxPER(0, value); break; + case 0x0A8: AUDxVOL(0, value); break; + case 0x0AA: AUDxDAT(0, value); break; - - Writing to SPRxPOS when SPRxPOS matches: shift register - copy is always done first, then new SPRxPOS value is stored - for future use. (SPRxCTL not tested) -*/ + case 0x0B0: AUDxLCH(1, value); break; + case 0x0B2: AUDxLCL(1, value); break; + case 0x0B4: AUDxLEN(1, value); break; + case 0x0B6: AUDxPER(1, value); break; + case 0x0B8: AUDxVOL(1, value); break; + case 0x0BA: AUDxDAT(1, value); break; -static void SPRxDATA(int hpos, uae_u16 v, int num) -{ - struct sprite *s = &spr[num]; - decide_sprites(hpos, false); - SPRxDATA_1(v, num, hpos); - // if 32 (16-bit double CAS only) or 64 pixel wide sprite and SPRxDATx write: - // - first 16 pixel part: previous chipset bus data - // - following 16 pixel parts: written data - if (fmode & 8) { - if ((fmode & 4) && get_bitplane_dma_rel(hpos, -1)) { - sprite_get_bpl_data(hpos, s, &s->data[0]); - } else { - s->data[0] = last_custom_value; - } - } -} + case 0x0C0: AUDxLCH(2, value); break; + case 0x0C2: AUDxLCL(2, value); break; + case 0x0C4: AUDxLEN(2, value); break; + case 0x0C6: AUDxPER(2, value); break; + case 0x0C8: AUDxVOL(2, value); break; + case 0x0CA: AUDxDAT(2, value); break; -static void SPRxDATB(int hpos, uae_u16 v, int num) -{ - struct sprite *s = &spr[num]; - decide_sprites(hpos, false); - SPRxDATB_1(v, num, hpos); - // See above - if (fmode & 8) { - if ((fmode & 4) && get_bitplane_dma_rel(hpos, -1)) { - sprite_get_bpl_data(hpos, s, &s->datb[0]); - } else { - s->datb[0] = last_custom_value; - } - } -} + case 0x0D0: AUDxLCH(3, value); break; + case 0x0D2: AUDxLCL(3, value); break; + case 0x0D4: AUDxLEN(3, value); break; + case 0x0D6: AUDxPER(3, value); break; + case 0x0D8: AUDxVOL(3, value); break; + case 0x0DA: AUDxDAT(3, value); break; -static void SPRxCTL_2(uae_u32 vv) -{ - int hpos = current_hpos(); - if (!currprefs.cpu_memory_cycle_exact) { - // current_hpos() assumes cycle-by-cycle emulation which does not happen in non-CE modes. FIXME! - hpos = ((vv >> 24) + 1) % maxhposm0; - } - uae_u16 v = vv >> 8; - int num = vv & 7; -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log(_T("%d:%d:SPR%dCTLC %06X\n"), vpos, hpos, num, spr[num].pt); - } + case 0x0E0: BPLxPTH(value, 0); break; + case 0x0E2: BPLxPTL(value, 0); break; + case 0x0E4: BPLxPTH(value, 1); break; + case 0x0E6: BPLxPTL(value, 1); break; + case 0x0E8: BPLxPTH(value, 2); break; + case 0x0EA: BPLxPTL(value, 2); break; + case 0x0EC: BPLxPTH(value, 3); break; + case 0x0EE: BPLxPTL(value, 3); break; + case 0x0F0: BPLxPTH(value, 4); break; + case 0x0F2: BPLxPTL(value, 4); break; + case 0x0F4: BPLxPTH(value, 5); break; + case 0x0F6: BPLxPTL(value, 5); break; + case 0x0F8: BPLxPTH(value, 6); break; + case 0x0FA: BPLxPTL(value, 6); break; + case 0x0FC: BPLxPTH(value, 7); break; + case 0x0FE: BPLxPTL(value, 7); break; + + case 0x100: BPLCON0(value); break; + case 0x102: BPLCON1(value); break; + case 0x104: BPLCON2(value); break; + case 0x106: BPLCON3(value); break; +#ifdef AGA + case 0x10c: BPLCON4(value); break; #endif - decide_sprites(hpos); - SPRxCTL_1(v, num, hpos); -} -static void SPRxCTL(int hpos, uae_u16 v, int num) -{ - uae_u32 vv = (hpos << 24) | (v << 8) | num; - event2_newevent_xx_ce(1 * CYCLE_UNIT, vv, SPRxCTL_2); -} + case 0x108: BPL1MOD(value); break; + case 0x10A: BPL2MOD(value); break; -static void SPRxPOS_2(uae_u32 vv) -{ - int hpos = current_hpos(); - if (!currprefs.cpu_memory_cycle_exact) { - hpos = ((vv >> 24) + 1) % maxhposm0; - } - uae_u16 v = vv >> 8; - int num = vv & 7; - struct sprite *s = &spr[num]; -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log(_T("%d:%d:SPR%dPOSC %06X\n"), vpos, hpos, num, s->pt); - } +#if 0 + case 0x110: BPLxDAT(0, value); break; + case 0x112: BPLxDAT(1, value); break; + case 0x114: BPLxDAT(2, value); break; + case 0x116: BPLxDAT(3, value); break; + case 0x118: BPLxDAT(4, value); break; + case 0x11A: BPLxDAT(5, value); break; + case 0x11C: BPLxDAT(6, value); break; + case 0x11E: BPLxDAT(7, value); break; + + case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: + case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: + case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: + case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: + case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: + case 0x1BC: case 0x1BE: + COLOR_WRITE(value & 0x8FFF, (addr & 0x3E) / 2); + break; #endif - decide_sprites(hpos); - SPRxPOS_1(v, num, hpos); -} -static void SPRxPOS(int hpos, uae_u16 v, int num) -{ - uae_u32 vv = (hpos << 24) | (v << 8) | num; - event2_newevent_xx_ce(1 * CYCLE_UNIT, vv, SPRxPOS_2); -} -static void SPRxPTH(int hpos, uae_u16 v, int num) -{ - decide_line(hpos); - decide_fetch_safe(hpos); - decide_sprites(hpos); - if (get_sprite_dma_rel(hpos, 1) != num || (!copper_access && !currprefs.cpu_memory_cycle_exact)) { - spr[num].pt &= 0xffff; - spr[num].pt |= (uae_u32)v << 16; + case 0x120: case 0x124: case 0x128: case 0x12C: + case 0x130: case 0x134: case 0x138: case 0x13C: + SPRxPTH(value, (addr - 0x120) / 4); + break; + case 0x122: case 0x126: case 0x12A: case 0x12E: + case 0x132: case 0x136: case 0x13A: case 0x13E: + SPRxPTL(value, (addr - 0x122) / 4); + break; + case 0x140: case 0x148: case 0x150: case 0x158: + case 0x160: case 0x168: case 0x170: case 0x178: + SPRxPOS(value, (addr - 0x140) / 8); + break; + case 0x142: case 0x14A: case 0x152: case 0x15A: + case 0x162: case 0x16A: case 0x172: case 0x17A: + SPRxCTL(value, (addr - 0x142) / 8); + break; #if 0 - } else { - write_log(_T("SPRxPTH %d\n"), num); + case 0x144: case 0x14C: case 0x154: case 0x15C: + case 0x164: case 0x16C: case 0x174: case 0x17C: + SPRxDATA(value, (addr - 0x144) / 8); + break; + case 0x146: case 0x14E: case 0x156: case 0x15E: + case 0x166: case 0x16E: case 0x176: case 0x17E: + SPRxDATB(value, (addr - 0x146) / 8); + break; #endif - } -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dPTH %06X\n"), vpos, hpos, num, spr[num].pt); - } + case 0x36: JOYTEST(value); break; + case 0x5A: BLTCON0L(value); break; + case 0x5C: BLTSIZV(hpos, value); break; + case 0x5E: BLTSIZH(hpos, value); break; + case 0x1E4: DIWHIGH(value); break; + + case 0x1DC: BEAMCON0(value); break; + case 0x1C0: + if (htotal != value) { + htotal = value & (MAXHPOS_ROWS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1C2: + if (hsstop != value) { + hsstop = value & (MAXHPOS_ROWS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1C4: + if (hbstrt != value) { + hbstrt = value & 0x7ff; + hbstrt_cck = hbstrt & 0xff; + varsync(addr, 0, -1); + } + break; + case 0x1C6: + if (hbstop != value) { + hbstop = value & 0x7ff; + hbstop_cck = hbstop & 0xff; + varsync(addr, 0, -1); + } + break; + case 0x1C8: + if (vtotal != value) { + vtotal = value & (MAXVPOS_LINES_ECS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1CA: + if (vsstop != value) { + vsstop = value & (MAXVPOS_LINES_ECS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1CC: + if (vbstrt != value) { + uae_u16 old = vbstrt; + vbstrt = value & (MAXVPOS_LINES_ECS - 1); + varsync(addr, 0, old); + } + break; + case 0x1CE: + if (vbstop != value) { + uae_u16 old = vbstop; + vbstop = value & (MAXVPOS_LINES_ECS - 1); + varsync(addr, 0, old); + } + break; + case 0x1DE: + if (hsstrt != value) { + hsstrt = value & (MAXHPOS_ROWS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1E0: + if (vsstrt != value) { + vsstrt = value & (MAXVPOS_LINES_ECS - 1); + varsync(addr, 1, -1); + } + break; + case 0x1E2: + if (hcenter != value) { + hcenter = value & (MAXHPOS_ROWS - 1); + varsync(addr, 0, -1); + } + break; + + case 0x1D0: SPRHSTRT(value); break; + case 0x1D2: SPRHSTOP(value); break; + case 0x1D4: BPLHSTRT(value); break; + case 0x1D6: BPLHSTOP(value); break; + case 0x1D8: HHPOS(value); break; + case 0x1E6: BPLHMOD(value); break; + case 0x1E8: SPRHPTH(value); break; + case 0x1EA: SPRHPTL(value); break; + case 0x1EC: BPLHPTH(value); break; + case 0x1EE: BPLHPTL(value); break; + +#ifdef AGA + case 0x1FC: FMODE(value); break; #endif -} -static void SPRxPTL(int hpos, uae_u16 v, int num) -{ - decide_line(hpos); - decide_fetch_safe(hpos); - decide_sprites(hpos); - if (get_sprite_dma_rel(hpos, 1) != num || (!copper_access && !currprefs.cpu_memory_cycle_exact)) { - spr[num].pt &= ~0xffff; - spr[num].pt |= v & ~1; -#if 0 - } else { - write_log(_T("SPRxPTL %d\n"), num); + case 0x1FE: FNULL(value); break; + + /* writing to read-only register causes read access */ + default: + if (!noget) { +#if CUSTOM_DEBUG > 0 + write_log(_T("%04X written %08x\n"), addr, M68K_GETPC); #endif + custom_wget_1(hpos, addr, 1, false); + } + return 1; } -#if SPRITE_DEBUG > 0 - if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) { - write_log (_T("%d:%d:SPR%dPTL %06X\n"), vpos, hpos, num, spr[num].pt); - } -#endif + return 0; } -static void CLXCON(int hpos, uae_u16 v) +static int REGPARAM2 custom_wput_1(uaecptr addr, uae_u32 value, int noget) { - if (hpos >= 0) { - check_collisions(hpos); + int hpos = agnus_hpos; + uaecptr oaddr = addr; + addr &= 0x1FE; + value &= 0xffff; + custom_storage[addr >> 1].value = (uae_u16)value; + custom_storage[addr >> 1].pc = copper_access ? cop_state.ip | 1 : M68K_GETPC; +#ifdef ACTION_REPLAY +#ifdef ACTION_REPLAY_COMMON + ar_custom[addr + 0]=(uae_u8)(value >> 8); + ar_custom[addr + 1]=(uae_u8)(value); +#endif +#endif +#ifdef DEBUGGER + if (memwatch_access_validator) { + debug_check_reg(oaddr, 1, value); } - clxcon = v; - clxcon_bpl_enable = (v >> 6) & 63; - clxcon_bpl_match = v & 63; - //write_log("%08x %04x %d %d\n", M68K_GETPC, v, clxcon_bpl_enable, clxcon_bpl_match); +#endif + int c = get_reg_chip(addr); + if (!(noget & 0x8000) && (c & 2)) { + uae_u32 v = value; + if (c & 4) { + v <<= 16; + } + if (currprefs.m68k_speed < 0 || custom_fastmode > 0) { + denise_update_reg(addr & 0x1fe, v); + } else { + write_drga(addr, NULL, v); + } + } + if (c & 1) { + return custom_wput_agnus(addr, value, noget); + } + return 0; } -static void CLXCON2(int hpos, uae_u16 v) +static void REGPARAM2 custom_wput(uaecptr addr, uae_u32 value) { - if (!aga_mode) + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { + dummy_put(addr, 2, value); return; - if (hpos >= 0) { - check_collisions(hpos); } - clxcon2 = v; - clxcon_bpl_enable |= v & (0x40 | 0x80); - clxcon_bpl_match |= (v & (0x01 | 0x02)) << 6; -} - -static uae_u16 CLXDAT(int hpos) -{ - if (hpos >= 0) { - check_collisions(hpos); +#if CUSTOM_DEBUG > 2 + write_log (_T("%d:%d:wput: %04X %04X pc=%p\n"), hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc ()); +#endif + if (addr & 1) { +#ifdef DEBUGGER + debug_invalid_reg(addr, -2, value); +#endif + addr &= ~1; + custom_wput_1(addr, (value >> 8) | (value & 0xff00), 0); + custom_wput_1(addr + 2, (value << 8) | (value & 0x00ff), 0); + return; } - uae_u16 v = clxdat | 0x8000; - //write_log("%08x %04x\n", M68K_GETPC, v); - clxdat = 0; - return v; + custom_wput_1(addr, value, 0); } -#ifdef AGA - -void dump_aga_custom(void) +static void REGPARAM2 custom_bput(uaecptr addr, uae_u32 value) { - int c1, c2, c3, c4; - uae_u32 rgb1, rgb2, rgb3, rgb4; + uae_u16 rval; - for (c1 = 0; c1 < 64; c1++) { - c2 = c1 + 64; - c3 = c2 + 64; - c4 = c3 + 64; - rgb1 = current_colors.color_regs_aga[c1]; - rgb2 = current_colors.color_regs_aga[c2]; - rgb3 = current_colors.color_regs_aga[c3]; - rgb4 = current_colors.color_regs_aga[c4]; - console_out_f (_T("%3d %08X %3d %08X %3d %08X %3d %08X\n"), - c1, rgb1, c2, rgb2, c3, rgb3, c4, rgb4); + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { + dummy_put(addr, 1, value); + return; + } +#ifdef DEBUGGER + debug_invalid_reg(addr, -1, value); +#endif + if (aga_mode) { + if (addr & 1) { + rval = value & 0xff; + } else { + rval = (value << 8) | (value & 0xff); + } + } else { + rval = (value << 8) | (value & 0xff); } -} - -static uae_u16 COLOR_READ(int num) -{ - int cr, cg, cb, colreg; - uae_u16 cval; - - if (!aga_mode || !(bplcon2 & 0x0100)) - return 0xffff; - colreg = ((bplcon3 >> 13) & 7) * 32 + num; - cr = (current_colors.color_regs_aga[colreg] >> 16) & 0xFF; - cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF; - cb = current_colors.color_regs_aga[colreg] & 0xFF; - if (bplcon3 & 0x200) { - cval = ((cr & 15) << 8) | ((cg & 15) << 4) | ((cb & 15) << 0); + if (currprefs.cs_bytecustomwritebug) { + if (addr & 1) + custom_wput(addr & ~1, rval | (rval << 8)); + else + custom_wput(addr, value << 8); } else { - cval = ((cr >> 4) << 8) | ((cg >> 4) << 4) | ((cb >> 4) << 0); - if (color_regs_genlock[num]) - cval |= 0x8000; + custom_wput(addr & ~1, rval); } - return cval; } -#endif -static void checkautoscalecol0(void) +static void REGPARAM2 custom_lput(uaecptr addr, uae_u32 value) { - if (!copper_access) - return; - if (vpos < 20) - return; - if (isbrdblank(-1, bplcon0, bplcon3)) + if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { + dummy_put(addr, 4, value); return; - // autoscale if copper changes COLOR00 on top or bottom of screen - if (vpos >= minfirstline) { - int vpos2 = autoscale_bordercolors ? minfirstline : vpos; - if (first_planes_vpos == 0) { - first_planes_vpos = vpos2 - 2; - } - if (plffirstline_total == current_maxvpos()) { - plffirstline_total = vpos2 - 2; - } - if (vpos2 > last_planes_vpos || vpos2 > plflastline_total) { - plflastline_total = last_planes_vpos = vpos2 + 3; - } - autoscale_bordercolors = 0; - } else { - autoscale_bordercolors++; } + custom_wput(addr & 0xfffe, value >> 16); + custom_wput((addr + 2) & 0xfffe, (uae_u16)value); } -bool get_custom_color_reg(int colreg, uae_u8 *r, uae_u8 *g, uae_u8 *b) +#ifdef SAVESTATE + +void custom_prepare_savestate(void) { - if (colreg < 0) - return false; - if (colreg >= 32 && !aga_mode) { - return false; - } - if (colreg >= 256) { - return false; + if (!currprefs.cpu_cycle_exact) { + for (int i = 0; i < ev2_max; i++) { + if (eventtab2[i].active) { + eventtab2[i].active = 0; + eventtab2[i].handler(eventtab2[i].data); + } + } } - if (aga_mode) { - *r = (current_colors.color_regs_aga[colreg] >> 16) & 0xFF; - *g = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF; - *b = current_colors.color_regs_aga[colreg] & 0xFF; - } else { - *r = (current_colors.color_regs_ecs[colreg] >> 8) & 15; - *r |= (*r) << 4; - *g = (current_colors.color_regs_ecs[colreg] >> 4) & 15; - *g |= (*g) << 4; - *b = (current_colors.color_regs_ecs[colreg] >> 0) & 15; - *b |= (*b) << 4; +} + +void restore_custom_finish(void) +{ + if ((bplcon0 & 2) && !currprefs.genlock) { + changed_prefs.genlock = currprefs.genlock = 1; + write_log(_T("statefile with BPLCON0 ERSY set without Genlock. Enabling Genlock.\n")); } - return true; } -static void COLOR_WRITE(int hpos, uae_u16 v, int num) +void restore_custom_start(void) { - bool samecycle = false; + memset(&cop_state, 0, sizeof(cop_state)); + cop_state.state = COP_stop; + denise_reset(true); +} - // skip color register write color change state update if COLOR0 register was already written in same cycle - // fast CPU modes can write tens of thousands of color registers in single frame. - if (currprefs.m68k_speed < 0 && num == 0) { - if (line_start_cycles == custom_color_write_cycle) { - if (color_writes_num++ > maxhpos / 2) { - samecycle = true; - } - } else { - color_writes_num = 0; - custom_color_write_cycle = line_start_cycles; - } - } +#define RB restore_u8() +#define SRB restore_s8() +#define RBB (restore_u8() != 0) +#define RW restore_u16() +#define RL restore_u32() -#ifdef AGA - if (aga_mode) { - int r,g,b; - int cr,cg,cb; - int colreg; - uae_u32 cval; +uae_u8 *restore_custom(uae_u8 *src) +{ + uae_u16 dsklen, dskbytr, tmp; + int dskpt; + int i; - /* writing is disabled when RDRAM=1 */ - if (bplcon2 & 0x0100) - return; + audio_reset(); - colreg = ((bplcon3 >> 13) & 7) * 32 + num; - r = (v & 0xF00) >> 8; - g = (v & 0xF0) >> 4; - b = (v & 0xF) >> 0; - cr = (current_colors.color_regs_aga[colreg] >> 16) & 0xFF; - cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF; - cb = current_colors.color_regs_aga[colreg] & 0xFF; - - if (bplcon3 & 0x200) { - cr &= 0xF0; cr |= r; - cg &= 0xF0; cg |= g; - cb &= 0xF0; cb |= b; - } else { - cr = r + (r << 4); - cg = g + (g << 4); - cb = b + (b << 4); - color_regs_genlock[colreg] = v >> 15; - } - cval = (cr << 16) | (cg << 8) | cb | (color_regs_genlock[colreg] ? COLOR_CHANGE_GENLOCK : 0); - if (cval == current_colors.color_regs_aga[colreg]) { - return; - } - if ((cval & 0xffffff) && colreg == 0) { - checkautoscalecol0(); - } - - /* Call this with the old table still intact. */ - if (!samecycle) { - record_color_change(hpos, colreg, cval); - } - remembered_color_entry = -1; - current_colors.color_regs_aga[colreg] = cval; - current_colors.acolors[colreg] = getxcolor(cval); - - } else { -#endif - if (!ecs_denise) { - v &= 0xfff; - } - color_regs_genlock[num] = v >> 15; - if (current_colors.color_regs_ecs[num] == v) { - return; - } - if ((v & 0xfff) && num == 0) { - checkautoscalecol0(); - } - - /* Call this with the old table still intact. */ - if (!samecycle) { - record_color_change(hpos, num, v); - } - remembered_color_entry = -1; - current_colors.color_regs_ecs[num] = v; - current_colors.acolors[num] = getxcolor(v); -#ifdef AGA - } -#endif -} - -#if ESTIMATED_FETCH_MODE -bool bitplane_dma_access(int hpos, int coffset) -{ - if (line_cyclebased) { - int offset = get_rga_pipeline(hpos, coffset); - if (cycle_line_pipe[offset] & CYCLE_PIPE_BITPLANE) { - return true; - } - } else { - hpos += coffset; - if (hpos >= maxhpos) { - hpos -= maxhpos; - if (estimated_cycles_next[hpos] > 0) { - return true; - } - } else { - if (estimated_cycles[hpos] > 0) { - return true; - } - } - } - return false; -} + custom_state_flags = RL; + changed_prefs.chipset_mask = currprefs.chipset_mask = custom_state_flags & CSMASK_MASK; + update_mirrors(); + blt_info.bltddat = RW; /* 000 BLTDDAT */ + RW; /* 002 DMACONR */ + RW; /* 004 VPOSR */ + RW; /* 006 VHPOSR */ + RW; /* 008 DSKDATR (dummy register) */ + JOYSET(0, RW); /* 00A JOY0DAT */ + JOYSET(1, RW); /* 00C JOY1DAT */ + clxdat = RW; /* 00E CLXDAT */ + RW; /* 010 ADKCONR */ + RW; /* 012 POT0DAT* */ + RW; /* 014 POT1DAT* */ + RW; /* 016 POTINP* */ + RW; /* 018 SERDATR* */ + dskbytr = RW; /* 01A DSKBYTR */ + RW; /* 01C INTENAR */ + RW; /* 01E INTREQR */ + dskpt = RL; /* 020-022 DSKPT */ + dsklen = RW; /* 024 DSKLEN */ + RW; /* 026 DSKDAT */ + refptr = RW; /* 028 REFPTR */ + i = RW; lof_store = (i & 0x8000) != 0; lol = (i & 0x0080) != 0; /* 02A VPOSW */ + RW; /* 02C VHPOSW */ + COPCON(RW); /* 02E COPCON */ + RW; /* 030 SERDAT* */ +#ifdef SERIAL_PORT + serper = RW; /* 032 SERPER* */ #else -bool bitplane_dma_access(int hpos, int offset) -{ - hpos += offset; - if (hpos >= maxhpos) { - hpos -= maxhpos; - } - - int i = bpl_estimate_index; - for (int j = 0; j < MAX_BPL_ESTIMATES; j++) { - struct bpl_estimate *be = &bpl_estimates[i]; - if (be->vpos == vposh && be->startend) { - uae_u16 bploffset = 0xffff; - if (be->startend == 1) { - if (hpos >= be->start_pos && hpos < be->end_pos) { - bploffset = hpos - be->start_pos; - } - } else if (be->startend == 2) { - if (hpos >= be->start_pos) { - bploffset = hpos - be->start_pos; - } else if (hpos < be->end_pos) { - bploffset = maxhpos - be->start_pos + hpos; - } - } - if (bploffset < 0xffff) { - uae_u16 idx = (bploffset - be->ce_offset) & fetchstart_mask; - uae_s8 *cd = be->cycle_diagram; - int v = cd[idx]; - if (v > 0) { - return true; - } - return false; - } - } - i--; - if (i < 0) { - i += MAX_BPL_ESTIMATES; - } - } - return false; -} + RW; /* 032 SERPER* */ #endif - -bool blitter_cant_access(int hpos) -{ - if (!is_blitter_dma()) { - return true; - } - // bitplane dma check - int coffset = RGA_PIPELINE_OFFSET_BLITTER; - if (bitplane_dma_access(hpos, coffset)) { - return true; - } - // other DMA channel check - int offset = get_rga_pipeline(hpos, coffset); - if (cycle_line_pipe[offset] != 0 || blitter_pipe[offset] != 0) { - return true; - } - // static cycles are not in cycle_line_pipe - uae_u8 v = cycle_line_slot[offset]; - if (v == CYCLE_REFRESH || v == CYCLE_STROBE) { - return true; - } - // DMAL is not in cycle_line_pipe - if (!dmal_alloc_mask || (hpos & 1) != ((DMAL_FIRST_HPOS - RGA_PIPELINE_OFFSET_BLITTER) & 1)) { - return false; + potgo_value = 0; POTGO(RW); /* 034 POTGO */ + RW; /* 036 JOYTEST* */ + RW; /* 038 STREQU */ + RW; /* 03A STRVHBL */ + RW; /* 03C STRHOR */ + RW; /* 03E STRLONG */ + BLTCON0(RW); /* 040 BLTCON0 */ + BLTCON1(RW); /* 042 BLTCON1 */ + BLTAFWM(RW); /* 044 BLTAFWM */ + BLTALWM(RW); /* 046 BLTALWM */ + blt_info.bltcpt = RL; /* 048-04B BLTCPT */ + blt_info.bltbpt = RL; /* 04C-04F BLTBPT */ + blt_info.bltapt = RL; /* 050-053 BLTAPT */ + blt_info.bltdpt = RL; /* 054-057 BLTDPT */ + RW; /* 058 BLTSIZE */ + RW; /* 05A BLTCON0L */ + blt_info.vblitsize = RW;/* 05C BLTSIZV */ + blt_info.hblitsize = RW;/* 05E BLTSIZH */ + blt_info.bltcmod_next = blt_info.bltcmod = RW; /* 060 BLTCMOD */ + blt_info.bltbmod_next = blt_info.bltbmod = RW; /* 062 BLTBMOD */ + blt_info.bltamod_next = blt_info.bltamod = RW; /* 064 BLTAMOD */ + blt_info.bltdmod_next = blt_info.bltdmod = RW; /* 066 BLTDMOD */ + RW; /* 068 ? */ + RW; /* 06A ? */ + RW; /* 06C ? */ + RW; /* 06E ? */ + BLTCDAT(RW); /* 070 BLTCDAT */ + BLTBDAT(RW); /* 072 BLTBDAT */ + BLTADAT(RW); /* 074 BLTADAT */ + RW; /* 076 ? */ + RW; /* 078 ? */ + RW; /* 07A ? */ + RW; /* 07C LISAID */ + DSKSYNC(-1, RW); /* 07E DSKSYNC */ + cop1lc = RL; /* 080/082 COP1LC */ + cop2lc = RL; /* 084/086 COP2LC */ + RW; /* 088 ? */ + RW; /* 08A ? */ + RW; /* 08C ? */ + diwstrt = RW; /* 08E DIWSTRT */ + diwstop = RW; /* 090 DIWSTOP */ + ddfstrt = RW; /* 092 DDFSTRT */ + ddfstop = RW; /* 094 DDFSTOP */ + dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */ + CLXCON(RW); /* 098 CLXCON */ + intena = RW; /* 09A INTENA */ + intreq = RW; /* 09C INTREQ */ + adkcon = RW; /* 09E ADKCON */ + for (i = 0; i < 8; i++) + bplptx[i] = bplpt[i] = RL; + bplcon0 = RW; /* 100 BPLCON0 */ + bplcon1 = RW; /* 102 BPLCON1 */ + bplcon2 = RW; /* 104 BPLCON2 */ + bplcon3 = RW; /* 106 BPLCON3 */ + bpl1mod = RW; /* 108 BPL1MOD */ + bpl2mod = RW; /* 10A BPL2MOD */ + bplcon4 = RW; /* 10C BPLCON4 */ + clxcon2 = RW; /* 10E CLXCON2* */ + for (i = 0; i < 8; i++) { + tmp = RW; /* BPLXDAT */ + restore_custom_bpl_dat(i, tmp); } - int dmaloffset = hpos - (DMAL_FIRST_HPOS - RGA_PIPELINE_OFFSET_BLITTER); - // 3 disk + 4 audio - if (dmaloffset >= 0 && dmaloffset < 3 * 2 + 4 * 2) { - if (dmal_alloc_mask & (3 << dmaloffset)) { - return true; - } + for (i = 0; i < 32; i++) { + uae_u16 v = RW; + denise_colors.color_regs_genlock[i] = (v & 0x8000) != 0; + denise_colors.color_regs_ecs[i] = v & 0xfff; /* 180 COLORxx */ + denise_colors.color_regs_aga[i] = getxcolor(v); + saved_color_regs_aga[i] = getxcolor(v); } - return false; -} - -static bool copper_cant_read(int hpos, uae_u16 alloc) -{ - if (!is_copper_dma(true)) { - return true; + htotal = RW; /* 1C0 HTOTAL */ + hsstop = RW; /* 1C2 HSTOP ? */ + hbstrt = RW; /* 1C4 HBSTRT ? */ + hbstop = RW; /* 1C6 HBSTOP ? */ + vtotal = RW; /* 1C8 VTOTAL */ + vsstop = RW; /* 1CA VSSTOP */ + vbstrt = RW; /* 1CC VBSTRT */ + vbstop = RW; /* 1CE VBSTOP */ + SPRHSTRT(RW); /* 1D0 SPRHSTART */ + SPRHSTOP(RW); /* 1D2 SPRHSTOP */ + BPLHSTRT(RW); /* 1D4 BPLHSTRT */ + BPLHSTOP(RW); /* 1D6 BPLHSTOP */ + hhpos = RW; /* 1D8 HHPOSW */ + RW; /* 1DA HHPOSR */ + new_beamcon0 = RW; /* 1DC BEAMCON0 */ + hsstrt = RW; /* 1DE HSSTRT */ + vsstrt = RW; /* 1E0 VSSTT */ + hcenter = RW; /* 1E2 HCENTER */ + diwhigh = RW; /* 1E4 DIWHIGH */ + diwhigh_written = (diwhigh & 0x8000) ? 1 : 0; + hdiwstate = (diwhigh & 0x4000) ? diw_states::DIW_waiting_stop : diw_states::DIW_waiting_start; + vdiwstate = (diwhigh & 0x0080) ? diw_states::DIW_waiting_start : diw_states::DIW_waiting_stop; + diwhigh &= 0x3f3f; + BPLHMOD(RW); /* 1E6 ? */ + SPRHPTH(RW); /* 1E8 ? */ + SPRHPTL(RW); /* 1EA ? */ + BPLHPTH(RW); /* 1EC ? */ + BPLHPTL(RW); /* 1EE ? */ + RW; /* 1F0 ? */ + RW; /* 1F2 ? */ + RW; /* 1F4 ? */ + RW; /* 1F6 ? */ + RW; /* 1F8 ? */ + i = RW; /* 1FA ? */ + if (i & 0x8000) { + currprefs.ntscmode = changed_prefs.ntscmode = i & 1; } + fmode = RW; /* 1FC FMODE */ + last_custom_value = RW; /* 1FE ? */ + refptr = RL; /* full refresh pointer */ - int coffset = RGA_PIPELINE_OFFSET_COPPER; - if (hpos == maxhposm1 && maxhposeven == COPPER_CYCLE_POLARITY) { - // if copper used last cycle of scanline and it is even cycle and - // it wants next available copper cycle: - // next scanline's cycles 1 and 2 gets allocated. - // cycle 1 is not used and also not usable by CPU or blitter. - // cycle 2 is used by the copper. - int offset = get_rga_pipeline(hpos, coffset); - if (alloc && !bitplane_dma_access(hpos, coffset) && !cycle_line_pipe[offset]) { - cycle_line_pipe[offset] = CYCLE_PIPE_NONE | CYCLE_PIPE_COPPER; - if (currprefs.blitter_cycle_exact) { - blitter_pipe[offset] = CYCLE_PIPE_COPPER; - } -#ifdef DEBUGGER - int dvpos = vpos + 1; - if (is_last_line()) { - dvpos = 0; - } - if (debug_dma) { - record_dma_event2(DMA_EVENT2_COPPERUSE, offset, dvpos); - } -#endif - } - coffset++; - } + bplcon0_saved = bplcon0; + bplcon1_saved = bplcon1; + bplcon2_saved = bplcon2; + bplcon3_saved = bplcon3; + bplcon4_saved = bplcon4; + fmode_saved = fmode; + beamcon0_saved = new_beamcon0; + ddfstrt_saved = ddfstrt; + ddfstop_saved = ddfstop; + diwhigh_saved = diwhigh; - if (bitplane_dma_access(hpos, coffset)) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_COPPERWANTED, hpos, vpos); - } -#endif - return true; - } + bitplane_dma_change(dmacon); + calcvdiw(); + denise_update_reg(0x100, bplcon0); + denise_update_reg(0x102, bplcon1); + denise_update_reg(0x104, bplcon2); + denise_update_reg(0x106, bplcon3); + denise_update_reg(0x10c, bplcon4); + denise_update_reg(0x08e, diwstrt); + denise_update_reg(0x090, diwstop); + if (diwhigh_written) { + denise_update_reg(0x1e4, diwhigh); + } + denise_update_reg(0x1fc, fmode); + denise_update_reg(0x098, clxcon); + denise_update_reg(0x10e, clxcon2); + denise_update_reg(0x1c4, hbstrt); + denise_update_reg(0x1c6, hbstop); + docols(&denise_colors); - int offset = get_rga_pipeline(hpos, coffset); + intreq2 = intreq; + intena2 = intena; - uae_u16 v = cycle_line_pipe[offset]; - if (v != 0 && !(v & CYCLE_PIPE_COPPER)) { -#if CYCLE_CONFLICT_LOGGING - if ((v & CYCLE_PIPE_BLITTER) || (v & CYCLE_PIPE_CPUSTEAL) || (v & CYCLE_PIPE_SPRITE)) { - write_log(_T("Copper's cycle stolen by lower priority channel %04x!?\n"), v); - } -#endif -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_COPPERWANTED, hpos, vpos); - } -#endif - return true; +#if 0 + // pre-6.0 versions stored statefile with LOF already toggled + if ((bplcon0 & 4) && !(custom_state_flags & 0x100)) { + lof_store = 1 - lof_store; } +#endif + lof_display = lof_detect = lof_store; - if (alloc) { - cycle_line_pipe[offset] = alloc; - // Keep copper cycles, without it blitter would - // think copper cycles are free cycles because they - // are cleared after copper has processed them - if (currprefs.blitter_cycle_exact) { - blitter_pipe[offset] = CYCLE_PIPE_COPPER; - } - } + DISK_restore_custom(dskpt, dsklen, dskbytr); + restore_blitter_start(); - return false; + return src; } -static int custom_wput_copper(int hpos, uaecptr pt, uaecptr addr, uae_u32 value, int noget) -{ - int v; +#endif /* SAVESTATE */ -#ifdef DEBUGGER - value = debug_putpeekdma_chipset(0xdff000 + addr, value, MW_MASK_COPPER, 0x08c); -#endif - copper_access = 1; - v = custom_wput_1(hpos, addr, value, noget); - copper_access = 0; - return v; -} +#if defined SAVESTATE || defined DEBUGGER -static void bprun_start(int hpos) -{ - bpl_hstart = hpos; - fetch_cycle = 0; - estimate_last_fetch_cycle(hpos); -} +#define SB save_u8 +#define SW save_u16 +#define SL save_u32 -static void decide_line(int endhpos) +uae_u8 *save_custom(size_t *len, uae_u8 *dstptr, int full) { - int hpos = last_decide_line_hpos; - if (hpos >= endhpos) { - return; - } - - bool ecs = ecs_agnus; - - while (hpos < endhpos) { - - // Do copper DMA first because we need to know - // new DDFSTRT etc values before bitplane decisions - if (cop_state.movedelay > 0) { - cop_state.movedelay--; - if (cop_state.movedelay == 0) { - custom_wput_copper(hpos, cop_state.moveptr, cop_state.moveaddr, cop_state.movedata, 0); - } - } - uae_u16 datreg = cycle_line_pipe[hpos]; - if (datreg & CYCLE_PIPE_COPPER) { - cycle_line_pipe[hpos] = 0; - do_copper_fetch(hpos, datreg); - } - - bool dma = dmacon_bpl; - bool diw = vdiwstate_bpl; - - if (ecs) { - // ECS/AGA + uae_u8 *dstbak, *dst; + int i, dummy; + uae_u32 dskpt; + uae_u16 dsklen, dsksync, dskbytr; + uae_u16 v; + int lof_mod = lof_store; - // BPRUN latched: on - if (bprun < 0 && (hpos & 1)) { - decide_line_decision_fetches(hpos); - bprun = 1; - bprun_pipeline_flush_delay = maxhpos; - bprun_cycle = 0; - scandoubler_bpl_dma_start(); - } + DISK_save_custom(&dskpt, &dsklen, &dsksync, &dskbytr); - // BPRUN latched: off - if (bprun == 3) { - decide_line_decision_fetches(hpos); - if (ddf_stopping == 1) { - // If bpl sequencer counter was all ones (last cycle of block): ddf passed jumps to last step. - if (islastbplseq()) { - ddf_stopping = 2; - } - } - bprun = 0; - bprun_end = hpos; - plfstrt_sprite = 0x100; - bprun_pipeline_flush_delay = maxhpos; - end_estimate_last_fetch_cycle(hpos); - } + if (dstptr) { + dstbak = dst = dstptr; + } else { + dstbak = dst = xmalloc(uae_u8, 8 + 256 * 2); + } - // DDFSTRT == DDFSTOP: BPRUN gets enabled and DDF passed state in next cycle. - if (ddf_enable_on < 0) { - ddf_enable_on = 0; - if (bprun && !ddf_stopping) { - decide_line_decision_fetches(hpos); - ddf_stopping = 1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTOP2, hpos, vpos); - } -#endif - } - } - - // Hard start limit - if (hpos == (0x18 | 0)) { - ddf_limit = false; - } - - // DDFSTRT - if (hpos == (plfstrt | 0) && hpos != ddfstrt_hpos) { - ddf_enable_on = 1; - } - - // Hard stop limit - if (hpos == (0xd7 + 0)) { - // Triggers DDFSTOP condition if hard limits are not disabled. - ddf_limit = true; - if (bprun && !ddf_stopping) { - if (!harddis_h) { - decide_line_decision_fetches(hpos); - ddf_stopping = 1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTOP2, hpos, vpos); - } -#endif - } - } - } - - // DDFSTOP - // Triggers DDFSTOP condition. - // Clears DDF allowed flag. - if ((hpos == plfstop && hpos != ddfstop_hpos) || (hpos == plfstop_prev && hpos == ddfstop_hpos)) { - if (bprun && !ddf_stopping) { - decide_line_decision_fetches(hpos); - ddf_stopping = 1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTOP, hpos, vpos); - } -#endif - } - if (plfstop != plfstrt) { - if (ddf_enable_on) { - ddf_enable_on = -1; - } else { - ddf_enable_on = 0; - } - } - } - - // BPRUN can only start if DMA, DIW or DDF state has changed since last time - if (!(hpos & 1)) { - bool hwi = dma && diw && ddf_enable_on > 0 && (!ddf_limit || harddis_h); - if (!bprun && dma && diw && hwi && !hwi_old) { - decide_line_decision_fetches(hpos); - // Bitplane sequencer activated - bprun = -1; - if (plfstrt_sprite > hpos + 1) { - plfstrt_sprite = hpos + 1; - } - bprun_start(hpos); - if (ddf_stopping) { - bprun_pipeline_flush_delay = maxhpos; - SET_LINE_CYCLEBASED(hpos); - } -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTRT, hpos, vpos); - } -#endif - } - - hwi_old = hwi; - } - - if (bprun == 2) { - bprun = 3; - // If DDF has passed, jumps to last step. - // (For example Scoopex Crash landing crack intro) - if (ddf_stopping == 1) { - ddf_stopping = 2; - } else if (ddf_stopping == 0) { - // If DDF has not passed, set it as passed. - ddf_stopping = 1; - } - } - - // DIW or DMA switched off: clear BPRUN - if ((!dma || !diw) && bprun == 1) { - decide_line_decision_fetches(hpos); - bprun = 2; - if (ddf_stopping == 1) { - ddf_stopping = 2; - bprun = 3; - } - SET_LINE_CYCLEBASED(hpos); - } - - } else { - // OCS - - // BPRUN latched: On - if (bprun < 0 && (hpos & 1)) { - decide_line_decision_fetches(hpos); - bprun = 1; - bprun_pipeline_flush_delay = maxhpos; - bprun_cycle = 0; - scandoubler_bpl_dma_start(); - } - // BPRUN latched: off - if (bprun == 3) { - decide_line_decision_fetches(hpos); - bprun = 0; - bprun_end = hpos; - plfstrt_sprite = 0x100; - bprun_pipeline_flush_delay = maxhpos; - end_estimate_last_fetch_cycle(hpos); - } - - // Hard start limit - if (hpos == 0x18) { - ddf_limit = false; - } - - // DDFSTOP - // Triggers DDFSTOP condition. - if ((hpos == plfstop && hpos != ddfstop_hpos) || (hpos == plfstop_prev && hpos == ddfstop_hpos)) { - if (bprun && !ddf_stopping) { - decide_line_decision_fetches(hpos); - ddf_stopping = 1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTOP, hpos, vpos); - } -#endif - } - } - - // Hard stop limit - // Triggers DDFSTOP condition. Last cycle of bitplane DMA resets DDFSTRT limit. - if (hpos == (0xd7 + 0)) { - if (bprun && !ddf_stopping) { - decide_line_decision_fetches(hpos); - ddf_stopping = 1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTOP2, hpos, vpos); - } -#endif - } - } - - // DDFSTRT - if (hpos == (plfstrt | 0) && hpos != ddfstrt_hpos) { - ddfstrt_match = true; - } else { - ddfstrt_match = false; - } - - if (!ddf_limit && ddfstrt_match && !bprun && dma && diw) { - decide_line_decision_fetches(hpos); - // Bitplane sequencer activated - bprun = -1; - if (plfstrt_sprite > hpos + 0) { - plfstrt_sprite = hpos + 0; - } - bprun_start(hpos); - if (ddf_stopping) { - bprun_pipeline_flush_delay = maxhpos; - SET_LINE_CYCLEBASED(hpos); - } -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_DDFSTRT, hpos, vpos); - } + SL(currprefs.chipset_mask | 0x100); + SW(blt_info.bltddat); /* 000 BLTDDAT */ + SW(DMACONR()); /* 002 DMACONR */ + SW(VPOSR()); /* 004 VPOSR */ + SW(VHPOSR()); /* 006 VHPOSR */ + SW(0); /* 008 DSKDATR */ + SW(JOYGET(0)); /* 00A JOY0DAT */ + SW(JOYGET(1)); /* 00C JOY1DAT */ + SW(clxdat | 0x8000); /* 00E CLXDAT */ + SW(ADKCONR()); /* 010 ADKCONR */ + SW(POT0DAT()); /* 012 POT0DAT */ + SW(POT1DAT()); /* 014 POT1DAT */ + SW(0); /* 016 POTINP * */ + SW(0); /* 018 SERDATR * */ + SW(dskbytr); /* 01A DSKBYTR */ + SW(INTENAR()); /* 01C INTENAR */ + SW(INTREQR()); /* 01E INTREQR */ + SL(dskpt); /* 020-023 DSKPT */ + SW(dsklen); /* 024 DSKLEN */ + SW(0); /* 026 DSKDAT */ + SW(refptr); /* 028 REFPTR */ + SW((lof_mod ? 0x8001 : 0) | (lol ? 0x0080 : 0));/* 02A VPOSW */ + SW(0); /* 02C VHPOSW */ + SW(copcon); /* 02E COPCON */ +#ifdef SERIAL_PORT + SW(serdat); /* 030 SERDAT * */ + SW(serper); /* 032 SERPER * */ +#else + SW(0); /* 030 SERDAT * */ + SW(0); /* 032 SERPER * */ #endif - } - - if (bprun == 2) { - // If DDF has passed, jumps to last step. - // (For example Scoopex Crash landing crack intro) - if (ddf_stopping == 1) { - ddf_stopping = 2; - } - bprun = 3; - } - - // DMA or DIW off: clear BPRUN - if ((!dma || !diw) && bprun == 1) { - decide_line_decision_fetches(hpos); - bprun = 2; - if (ddf_stopping == 1) { - ddf_stopping = 2; - bprun = 3; - } - SET_LINE_CYCLEBASED(hpos); - } - - } - - if (line_cyclebased) { - decide_bpl_fetch(hpos); - } - - hpos++; - } - - decide_sprites_fetch(endhpos); - - last_decide_line_hpos = endhpos; -} - -static void setstrobecopip(void) -{ - if (cop_state.strobe == 3) { - cop_state.ip = cop1lc | cop2lc; - } else if (cop_state.strobe == 1) { - cop_state.ip = cop1lc; + SW(potgo_value); /* 034 POTGO */ + SW(0); /* 036 JOYTEST * */ + SW(0); /* 038 STREQU */ + SW(0); /* 03A STRVBL */ + SW(0); /* 03C STRHOR */ + SW(0); /* 03E STRLONG */ + SW(blt_info.bltcon0); /* 040 BLTCON0 */ + SW(blt_info.bltcon1); /* 042 BLTCON1 */ + SW(blt_info.bltafwm); /* 044 BLTAFWM */ + SW(blt_info.bltalwm); /* 046 BLTALWM */ + SL(blt_info.bltcpt); /* 048-04B BLTCPT */ + SL(blt_info.bltbpt); /* 04C-04F BLTCPT */ + SL(blt_info.bltapt); /* 050-053 BLTCPT */ + SL(blt_info.bltdpt); /* 054-057 BLTCPT */ + if (blt_info.vblitsize > 1024 || blt_info.hblitsize > 64) { + v = 0; } else { - cop_state.ip = cop2lc; - } - cop_state.strobe = 0; -} - -/* - CPU write COPJMP wakeup sequence when copper is waiting: - - Idle cycle (can be used by other DMA channel) - - Read word from current copper pointer (next word after wait instruction) to 1FE - This cycle can conflict with blitter DMA. - Normal copper cycles resume - - Write word from new copper pointer to 8C -*/ - -static void do_copper_fetch(int hpos, uae_u16 id) -{ - if (scandoubled_line) { - return; - } - - if (id & CYCLE_PIPE_NONE) { - alloc_cycle(hpos, CYCLE_COPPER); - return; - } - - switch (cop_state.state) - { - case COP_strobe_delay1: - case COP_strobe_delay3: - { - // fake MOVE phase 1 -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x8c, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c, cop_state.last_strobe == 2 ? 0x84 : 0x80); - } -#endif - cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[0]); - } - if (memwatch_enabled) { - debug_getpeekdma_value(cop_state.ir[0]); - } -#endif - cop_state.ip += 2; - if (cop_state.state == COP_strobe_delay3) { - cop_state.state = COP_strobe_delay5; - setstrobecopip(); - } else { - cop_state.state = COP_strobe_delay2; - } - alloc_cycle(hpos, CYCLE_COPPER); - break; - } - case COP_strobe_delay2: - case COP_strobe_delay4: - { - // fake MOVE phase 2 -#ifdef DEBUGGER - uae_u16 reg = 0x8c; // COPINS - if (debug_dma) { - record_dma_read(reg, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); - } -#endif - cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[1]); - record_dma_event2(DMA_EVENT2_COPPERUSE, hpos, vpos); - } -#endif - if (cop_state.state == COP_strobe_delay4) { - cop_state.state = COP_strobe_delay5; - } else { - cop_state.state = COP_read1; - } - // Next cycle finally reads from new pointer - setstrobecopip(); - alloc_cycle(hpos, CYCLE_COPPER); - } - break; - case COP_strobe_delay5: - { - // COPJMP when previous instruction is mid-cycle - cop_state.state = COP_read1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event2(DMA_EVENT2_COPPERUSE, hpos, vpos); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); + v = (blt_info.vblitsize << 6) | (blt_info.hblitsize & 63); } - break; - case COP_strobe_delay2x: -#ifdef DEBUGGER - { - if (debug_dma) { - record_dma_read(0x1fe, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 2); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x1fe, 0x1fe); - } - uae_u16 v = chipmem_wget_indirect(cop_state.ip); - if (debug_dma) { - record_dma_read_value(v); - } - if (memwatch_enabled) { - debug_getpeekdma_value(v); - } - } -#endif - cop_state.state = COP_read1; - // Next cycle finally reads from new pointer - setstrobecopip(); - alloc_cycle(hpos, CYCLE_COPPER); - break; - case COP_start_delay: - cop_state.state = COP_read1; -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x1fe, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 2); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x1fe, 0x1fe); - } -#endif - cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[0]); - } - if (memwatch_enabled) { - debug_getpeekdma_value(cop_state.ir[0]); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); - cop_state.ip = cop1lc; - break; - case COP_read1: -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x8c, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c, cop_state.last_strobe == 2 ? 0x84 : 0x80); - } -#endif - cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[0]); - } - if (memwatch_enabled) { - debug_getpeekdma_value(cop_state.ir[0]); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); - cop_state.ip += 2; - cop_state.state = COP_read2; - break; - case COP_read2: - if (cop_state.ir[0] & 1) { - // WAIT or SKIP -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x8c, cop_state.ip, hpos, vpos, DMARECORD_COPPER, (cop_state.ir[0] & 1) ? 1 : 0); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c, cop_state.last_strobe == 2 ? 0x84 : 0x80); - } -#endif - cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[1]); - } - if (memwatch_enabled) { - debug_getpeekdma_value(cop_state.ir[1]); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); - cop_state.ip += 2; - -#ifdef DEBUGGER - uaecptr debugip = cop_state.ip; -#endif - cop_state.ignore_next = 0; - if (cop_state.ir[1] & 1) { - cop_state.state = COP_skip_in2; - } else { - cop_state.state = COP_wait_in2; - } - - cop_state.vcmp = (cop_state.ir[0] & (cop_state.ir[1] | 0x8000)) >> 8; - cop_state.hcmp = (cop_state.ir[0] & cop_state.ir[1] & 0xFE); - -#ifdef DEBUGGER - record_copper(debugip - 4, debugip, cop_state.ir[0], cop_state.ir[1], hpos, vpos); -#endif - - } else { - // MOVE - uae_u16 reg = cop_state.ir[0] & 0x1FE; - -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(reg, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c, cop_state.last_strobe == 2 ? 0x84 : 0x80); - } -#endif - cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(cop_state.ir[1]); - } - if (memwatch_enabled) { - debug_getpeekdma_value(cop_state.ir[1]); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); - cop_state.ip += 2; - -#ifdef DEBUGGER - uaecptr debugip = cop_state.ip; -#endif - uae_u16 data = cop_state.ir[1]; - cop_state.state = COP_read1; - - test_copper_dangerous(reg); - // was "dangerous" register -> copper stopped - if (!copper_enabled_thisline) - return; - - // Previous instruction was SKIP that skipped - if (cop_state.ignore_next > 0) { - reg = 0x1fe; - } - - if (reg == 0x88) { - cop_state.strobe = 1; - cop_state.last_strobe = 1; - cop_state.state = COP_strobe_delay1; - } else if (reg == 0x8a) { - cop_state.strobe = 2; - cop_state.last_strobe = 2; - cop_state.state = COP_strobe_delay1; - } else { - if (reg == 0x100) { - // BPLCON0 new value is needed early - bplcon0_denise_change_early(hpos, data); -#if 1 - cop_state.moveaddr = reg; - cop_state.movedata = data; - cop_state.movedelay = 1; - cop_state.moveptr = cop_state.ip; -#else - custom_wput_copper(hpos, cop_state.ip, reg, data, 0); -#endif - } else { - custom_wput_copper(hpos, cop_state.ip, reg, data, 0); - } - } -#ifdef DEBUGGER - if (debug_copper && cop_state.ignore_next <= 0) { - uaecptr next = 0xffffffff; - if (reg == 0x88) { - next = cop1lc; - } else if (reg == 0x8a) { - next = cop2lc; - } - record_copper(debugip - 4, next, cop_state.ir[0], cop_state.ir[1], hpos, vpos); - } -#endif - cop_state.ignore_next = 0; - } - regs.chipset_latch_rw = last_custom_value = cop_state.ir[1]; - check_copper_stop(); - break; - - case COP_strobe_extra: - // do nothing, happens if CPU wrote to COPxJMP but copper had already requested DMA cycle - // Cycle will complete but nothing will happen because COPxJMP write resets copper state. -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x8c, cop_state.ip, hpos, vpos, DMARECORD_COPPER, 0); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c, cop_state.last_strobe == 2 ? 0x84 : 0x80); - } -#endif - alloc_cycle(hpos, CYCLE_COPPER); - break; - default: - write_log(_T("copper_fetch invalid state %d! %02x\n"), cop_state.state, id); - break; - } -} - -static int coppercomp(int hpos, bool blitwait) -{ - int hpos_cmp = hpos; - int vpos_cmp = vpos; - - // If waiting for last cycle of line and last cycle is even cycle: - // Horizontal counter has already wrapped around to zero. - if (hpos_cmp == maxhposm1 && maxhposeven == COPPER_CYCLE_POLARITY) { - hpos_cmp = 0; - } - - int vp = vpos_cmp & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); - int hp = hpos_cmp & (cop_state.ir[1] & 0xFE); - - if (vp < cop_state.vcmp) { - return -1; - } - - // Cycle 0: copper can't wake up - if (hpos == 0) { - return 1; - } - - if ((cop_state.ir[1] & 0x8000) == 0) { - decide_blitter(hpos); - if (blit_busy(-1, false)) { - if (blitwait) { - /* We need to wait for the blitter. */ - cop_state.state = COP_bltwait; - return -1; - } - return 1; - } - } - - if (vp > cop_state.vcmp) { - return 0; - } - if (vp == cop_state.vcmp && hp >= cop_state.hcmp) { - return 0; - } - - return 1; -} - -static void update_copper(int until_hpos) -{ - if (1 && (custom_disabled || !copper_enabled_thisline)) { - last_copper_hpos = until_hpos; - return; - } - - int hpos = last_copper_hpos; - while (hpos < until_hpos) { - - int hp = hpos + 1; - // So we know about the fetch state. - decide_line(hp); - // bitplane only, don't want blitter to steal our cycles. - decide_bpl_fetch(hp); - - // Handle copper DMA here if no bitplanes enabled. - // NOTE: can use odd cycles if DMA request was done during last cycle of line and it was even cycle (always in PAL). - // request cycle 226 (even), request always completes in 2 cycles = cycle 1 (odd). - // pipelined copper DMA read? - bool copper_dma = (cycle_line_pipe[hpos] & CYCLE_PIPE_COPPER) != 0; - if (copper_dma) { - uae_u16 v = cycle_line_pipe[hpos]; - cycle_line_pipe[hpos] = 0; - do_copper_fetch(hpos, v); - } - - if (!copper_enabled_thisline) { - goto next; - } - - if ((hpos & 1) != COPPER_CYCLE_POLARITY) { - goto next; - } - - // cycle 0 is only available if previous line ends to odd cycle - if (hpos == 0 && !maxhposeven_prev && cop_state.state != COP_start_delay) { - goto next; - } - -#if CYCLE_CONFLICT_LOGGING - { - uae_u8 c = cycle_line_slot[hpos] & CYCLE_MASK; - if (c && c != CYCLE_BITPLANE && c != CYCLE_COPPER) { - write_log(_T("Only bitplanes has higher priority can copper. Cycle conflict %d!!\n"), c); - } - } -#endif - - switch (cop_state.state) - { - case COP_strobe_delay1: - // First cycle after COPJMP. This is the strange one. - // This cycle does not need to be free - // But it still gets allocated by copper if it is free = CPU and blitter can't use it. - if (copper_cant_read(hpos, 0)) { - cop_state.state = COP_strobe_delay2; - } else { - if (hpos == maxhposm1 && maxhposeven == COPPER_CYCLE_POLARITY) { - // if COP_strobe_delay2 would cross scanlines, it will be skipped! - cop_state.state = COP_read1; - setstrobecopip(); - } else { - copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x08); - } - } - break; - case COP_strobe_delay2: - case COP_strobe_delay3: - case COP_strobe_delay4: - case COP_strobe_delay5: - // Second cycle after COPJMP does basically skipped MOVE (MOVE to 1FE) - // Cycle is used and needs to be free. - copper_cant_read(hpos, CYCLE_PIPE_COPPER); - break; - - case COP_strobe_delay1x: - // First cycle after CPU write to COPJMP while Copper was waiting. - // Cycle can be free and copper won't allocate it. - if (copper_cant_read(hpos, 0)) { - // becomes normal non-buggy cycle if cycle was not free - cop_state.state = COP_strobe_delay2; - } else { - cop_state.state = COP_strobe_delay2x; - } - break; - case COP_strobe_delay2x: - // Second cycle fetches following word and tosses it away. - // Cycle can be free and copper won't allocate it. - // If Blitter uses this cycle = Copper's new PC gets copied to blitter DMA pointer.. - if (!copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x09)) { - copper_bad_cycle = get_cycles(); - if (copper_bad_cycle - copper_bad_cycle_start != 3 * CYCLE_UNIT) { - copper_bad_cycle = 0; - } else { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_event(DMA_EVENT_SPECIAL, hpos, vpos); - } -#endif - // early COPJMP processing - cop_state.state = COP_read1; - copper_bad_cycle_pc_old = cop_state.ip; - setstrobecopip(); - copper_bad_cycle_pc_new = cop_state.ip; - } - } - break; - - case COP_start_delay: - // cycle after vblank strobe fetches word from old pointer first - copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x01); - break; - - // Request IR1 - case COP_read1: - copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x02); - break; - - // Request IR2 - case COP_read2: - copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x03); - break; - - // WAIT: Got IR2, first idle cycle. - // Need free cycle, cycle not allocated. - case COP_wait_in2: - { - if (copper_cant_read(hpos, 0)) { - goto next; - } - cop_state.state = COP_wait1; - } - break; - - // WAIT: Second idle cycle. Wait until comparison matches. - // Need free cycle, cycle not allocated. - case COP_wait1: - { - int comp = coppercomp(hpos, true); - if (comp < 0) { - // If we need to wait for later scanline or blitter: no need to emulate copper cycle-by-cycle - if (cop_state.ir[0] == 0xFFFF && cop_state.ir[1] == 0xFFFE && maxhpos < 250) { - cop_state.state = COP_waitforever; - } - copper_enabled_thisline = 0; - unset_special(SPCFLAG_COPPER); - goto next; - } - - if (comp) { - goto next; - } - - if (copper_cant_read(hpos, 0)) { - goto next; - } - - cop_state.state = COP_wait; - } - break; - - // Wait finished, request IR1. - case COP_wait: - { - if (copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x04)) { - goto next; - } -#ifdef DEBUGGER - if (debug_dma) - record_dma_event(DMA_EVENT_COPPERWAKE, hpos, vpos); - if (debug_copper) - record_copper(cop_state.ip - 4, 0xffffffff, cop_state.ir[0], cop_state.ir[1], hpos, vpos); -#endif - cop_state.state = COP_read1; - } - break; - - // SKIP: Got IR2. First idle cycle. - // Free cycle needed, cycle not allocated. - case COP_skip_in2: - - if (copper_cant_read(hpos, 0)) { - goto next; - } - cop_state.state = COP_skip1; - break; - - // SKIP: Second idle cycle. Do nothing. - // Free cycle needed, cycle not allocated. - case COP_skip1: - - if (copper_cant_read(hpos, 0)) { - goto next; - } - - cop_state.state = COP_skip; - break; - - // Check comparison. SKIP finished. Request IR1. - case COP_skip: - if (copper_cant_read(hpos, CYCLE_PIPE_COPPER | 0x005)) { - goto next; - } - - if (!coppercomp(hpos, false)) { - cop_state.ignore_next = 1; - } else { - cop_state.ignore_next = -1; - } - -#ifdef DEBUGGER - if (debug_dma && cop_state.ignore_next > 0) - record_dma_event(DMA_EVENT_COPPERSKIP, hpos, vpos); - if (debug_copper) - record_copper(cop_state.ip - 4, 0xffffffff, cop_state.ir[0], cop_state.ir[1], hpos, vpos); -#endif - - cop_state.state = COP_read1; - break; - - default: - break; - } -next: - if (copper_enabled_thisline) { - switch (cop_state.state) - { - case COP_strobe_extra: - // Wait 1 copper cycle doing nothing - cop_state.state = COP_strobe_delay1; - break; - } - } - - hpos++; - last_copper_hpos = hpos; - } -} - -static void compute_spcflag_copper(void) -{ - copper_enabled_thisline = 0; - unset_special(SPCFLAG_COPPER); - if (!is_copper_dma(true) || cop_state.state == COP_stop || cop_state.state == COP_waitforever || cop_state.state == COP_bltwait || cop_state.state == COP_bltwait2 || custom_disabled) - return; - if (cop_state.state == COP_wait1 && is_copper_dma(false)) { - int vp = vpos & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); - if (vp < cop_state.vcmp) { - return; - } - } - last_copper_hpos = current_hpos(); - if (issyncstopped_count <= 2) { - copper_enabled_thisline = 1; - set_special(SPCFLAG_COPPER); - } -} - -static void blitter_done_notify_wakeup(uae_u32 temp) -{ - if (cop_state.state != COP_bltwait2) { - return; - } - // blitter_done_notify() might be called too early, wait a bit if blitter is still busy. - if (blit_busy(-1, false)) { - event2_newevent_xx(-1, 1 * CYCLE_UNIT, 0, blitter_done_notify_wakeup); - return; - } - - cop_state.state = COP_wait1; - compute_spcflag_copper(); -#ifdef DEBUGGER - if (copper_enabled_thisline) { - int hpos = current_hpos(); - if (debug_dma) { - record_dma_event(DMA_EVENT_COPPERWAKE, hpos, vpos); - } - if (debug_copper) { - record_copper_blitwait(cop_state.ip - 4, hpos, vpos); - } - } -#endif -} - -void blitter_done_notify(int blitline) -{ - if (cop_state.state != COP_bltwait) { - return; - } - cop_state.state = COP_bltwait2; - event2_newevent_xx(-1, 1 * CYCLE_UNIT, 0, blitter_done_notify_wakeup); -} - -static void sync_copper(int hpos) -{ - if (copper_enabled_thisline) { - update_copper(hpos); - } -} - -static void cursorsprite(void) -{ - if (!dmaen(DMA_SPRITE) || first_planes_vpos == 0) { - return; - } - struct sprite *s = &spr[0]; - sprite_0 = s->pt; - sprite_0_height = s->vstop - s->vstart; - sprite_0_colors[0] = 0; - sprite_0_doubled = 0; - if (sprres == 0) { - sprite_0_doubled = 1; - } - if (spr[0].dblscan) { - sprite_0_height /= 2; - } - if (aga_mode) { - int sbasecol = ((bplcon4 >> 4) & 15) << 4; - sprite_0_colors[1] = current_colors.color_regs_aga[sbasecol + 1] & 0xffffff; - sprite_0_colors[2] = current_colors.color_regs_aga[sbasecol + 2] & 0xffffff; - sprite_0_colors[3] = current_colors.color_regs_aga[sbasecol + 3] & 0xffffff; - } else { - sprite_0_colors[1] = xcolors[current_colors.color_regs_ecs[17] & 0xfff]; - sprite_0_colors[2] = xcolors[current_colors.color_regs_ecs[18] & 0xfff]; - sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19] & 0xfff]; - } - sprite_0_width = sprite_width; - if (currprefs.input_tablet && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MAGIC)) { - if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive()) { - magic_sprite_mask &= ~1; - } else { - magic_sprite_mask |= 1; - } - } -} - -static uae_u16 sprite_fetch(struct sprite *s, uaecptr pt, int hpos, int slot, int mode) -{ - uae_u16 data = regs.chipset_latch_rw; - -#if CYCLE_CONFLICT_LOGGING - if ((hpos & 1) != (SPR_FIRST_HPOS & 1)) { - int num = s - &spr[0]; - write_log(_T("Sprite %d, hpos %d wrong cycle polarity!\n"), num, hpos); - } -#endif -#ifdef DEBUGGER - int num = addrdiff(s, &spr[0]); - if (debug_dma) { - record_dma_read(num * 8 + 0x140 + mode * 4 + slot * 2, pt, hpos, vpos, DMARECORD_SPRITE, num); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(pt, MW_MASK_SPR_0 << num, num * 8 + 0x140 + mode * 4 + slot * 2, num * 4 + 0x120); - } -#endif - data = regs.chipset_latch_rw = chipmem_wget_indirect(pt); - alloc_cycle(hpos, CYCLE_SPRITE); - return data; -} - -static void sprite_fetch_full(struct sprite *s, int hpos, int slot, int mode, uae_u16 *v0, uae_u32 *v1, uae_u32 *v2) -{ - uae_u32 data321 = 0, data322 = 0; - uae_u16 data16; - - if (sprite_width == 16) { - - data16 = sprite_fetch(s, s->pt, hpos, slot, mode); - -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value(data16); - } - if (debug_dma) { - record_dma_read_value(data16); - } -#endif - - s->pt += 2; - - } else if (sprite_width == 64) { - - uaecptr pm = s->pt & ~7; - uaecptr pm1, pm2; - if (s->pt & 4) { - pm1 = pm + 4; - pm2 = pm + 4; - } else { - pm1 = pm; - pm2 = pm + 4; - } - data321 = sprite_fetch(s, pm1, hpos, slot, mode) << 16; - data321 |= chipmem_wget_indirect(pm1 + 2); - data322 = chipmem_wget_indirect(pm2) << 16; - data322 |= chipmem_wget_indirect(pm2 + 2); - if (s->pt & 2) { - data321 &= 0x0000ffff; - data322 &= 0x0000ffff; - data321 |= data321 << 16; - data322 |= data322 << 16; - } - data16 = data321 >> 16; - -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value_long(data321, pm1 - s->pt); - debug_getpeekdma_value_long(data322, pm2 - s->pt); - } - if (debug_dma) { - record_dma_read_value_wide((((uae_u64)data321) << 32) | data322, true); - } -#endif - - s->pt += 8; - - } else { // 32 - - uaecptr pm = s->pt & ~3; - data321 = sprite_fetch(s, pm, hpos, slot, mode) << 16; - data321 |= chipmem_wget_indirect(pm + 2); - if (s->pt & 2) { - data321 &= 0x0000ffff; - data321 |= data321 << 16; - } else if (fetchmode_fmode_spr & 2) { - data321 &= 0xffff0000; - data321 |= data321 >> 16; - } - data16 = data321 >> 16; - -#ifdef DEBUGGER - if (memwatch_enabled) { - debug_getpeekdma_value_long(data321, pm - s->pt); - } - if (debug_dma) { - record_dma_read_value_wide(data321, true); - } -#endif - - s->pt += 4; - } - - *v0 = data16; - *v1 = data321; - *v2 = data322; -} - -static void do_sprite_fetch(int hpos, uae_u16 dat) -{ - int num = dat & 7; - struct sprite *s = &spr[num]; - uae_u32 data321, data322; - uae_u16 data; - bool slot = (dat & 8) != 0; - bool dmastate = (dat & 0x10) != 0; - - // render sprites first - decide_sprites(hpos, true); - - sprite_fetch_full(s, hpos, slot, dmastate, &data, &data321, &data322); - - if (dmastate) { - if (!slot) { - SPRxDATA_1(data, num, hpos); - } else { - SPRxDATB_1(data, num, hpos); - } -#ifdef AGA - switch (sprite_width) - { - case 64: - if (!slot) { - s->data[1] = data321; - s->data[2] = data322 >> 16; - s->data[3] = data322; - } else { - s->datb[1] = data321; - s->datb[2] = data322 >> 16; - s->datb[3] = data322; - } - break; - case 32: - if (!slot) { - s->data[1] = data321; - s->data[2] = data; - s->data[3] = data321; - } else { - s->datb[1] = data321; - s->datb[2] = data; - s->datb[3] = data321; - } - break; - } -#endif - } else { - if (!slot) { - SPRxPOS_1(data, num, hpos); - } else { - SPRxCTL_1(data, num, hpos); - // This is needed to disarm previous field's sprite. - // It can be seen on OCS Agnus + ECS Denise combination where - // this cycle is disabled due to weird DDFTSTR=$18 copper list - // which causes corrupted sprite to "wrap around" the display. - s->dmastate = 0; - sprstartstop(s); - } - // Sprite can't start if SPRxPOS/CTL DMA line matched on line after VBLANK ended - if (vb_end_line || vb_end_next_line) { - s->dmastate = 0; - s->dmacycle = 0; - } - } - -} - -static void sprite_stolen_cycle(uae_u32 num) -{ - uae_u32 v = regs.chipset_latch_rw; - struct sprite *s = &spr[num & 7]; - if (num & 0x100) { - s->datb[0] = v; - s->datb[1] = v >> 16; - } -} - -static void decide_sprites_fetch(int endhpos) -{ - int hpos = last_decide_sprite_hpos; - if (hpos >= endhpos) { - return; - } - if (vb_state || (doflickerfix_active() && (next_lineno & 1))) { - last_decide_sprite_hpos = endhpos; - return; - } - - while (hpos < endhpos) { - if (hpos >= SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH && hpos < SPR_FIRST_HPOS + MAX_SPRITES * 4) { - - if (hpos < SPR_FIRST_HPOS + MAX_SPRITES * 4 - RGA_SPRITE_PIPELINE_DEPTH) { - int num = (hpos - (SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH)) / 4; - int slot = (hpos - (SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH)) & 3; - if (slot == 0 || slot == 2) { - struct sprite *s = &spr[num]; - if (slot == 0) { - s->firstslotdone = false; - if (!s->dmacycle && s->dmastate) { - s->dmacycle = 1; - } - if (vpos == s->vstart && !vb_end_line && !vb_end_next_line) { - s->dmastate = 1; - s->dmacycle = 1; - if (num == 0 && slot == 0) { - cursorsprite(); - } - } - if (vpos == s->vstop || vb_end_next_line) { - s->dmastate = 0; - s->dmacycle = 1; - } - } - if (dmaen(DMA_SPRITE) && s->dmacycle && !vb_start_line && !vb_end_line) { - bool dodma = false; - - decide_bpl_fetch(hpos + 1); - - if (hpos <= plfstrt_sprite) { - dodma = true; - } else { - // bitplane stole this cycle - if (slot == 2 && sprite_width > 16 && s->firstslotdone) { - event2_newevent_xx(-1, RGA_PIPELINE_OFFSET_SPRITE * CYCLE_UNIT, num | (s->dmastate ? 0x100 : 0), sprite_stolen_cycle); - } - } -#ifdef AGA - if (dodma && s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) { - spr_arm(num, 1); - dodma = false; - } -#endif - if (dodma) { - int offset = get_rga_pipeline(hpos, RGA_PIPELINE_OFFSET_SPRITE); - uae_u8 dat = CYCLE_PIPE_SPRITE | (s->dmastate ? 0x10 : 0x00) | (s->dmacycle == 1 ? 0 : 8) | num; -#if 0 - if (cycle_line_pipe[offset]) { - write_log(_T("sprite cycle already allocated! %02x\n"), cycle_line_pipe[offset]); - } -#endif - evt_t t = line_start_cycles + hpos * CYCLE_UNIT; - if (t == sprite_dma_change_cycle_on) { - // if sprite DMA is switched on just when sprite DMA is decided, channel is still decided but it is not allocated! - sprbplconflict2 = 0x140 + num * 8 + slot + (s->dmacycle ? 4 : 0); - sprbplconflict_hpos = sprbplconflict_hpos2 = hpos + RGA_PIPELINE_OFFSET_SPRITE; - sprbplconflict_dat = dat & ~CYCLE_PIPE_SPRITE; - } else if (bprun_end == hpos || (cycle_line_pipe[offset] & CYCLE_PIPE_BITPLANE)) { - // last bitplane cycle is available for sprites (if bitplane ends before all sprites) - sprbplconflict = 0x140 + num * 8 + slot + (s->dmacycle ? 4 : 0); - sprbplconflict_hpos = hpos + RGA_PIPELINE_OFFSET_SPRITE; - sprbplconflict_dat = dat & ~CYCLE_PIPE_SPRITE; - } else { - cycle_line_pipe[offset] = dat; - } - s->firstslotdone = true; - } - } - if (!vb_end_line && s->dmacycle) { - s->dmacycle++; - if (s->dmacycle > 2) { - s->dmacycle = 0; - if (s->dmastate) { - s->dmacycle = 1; - } - } - } - } - } - - bool sprite_dma = (cycle_line_pipe[hpos] & CYCLE_PIPE_SPRITE) != 0; - if (sprite_dma) { - uae_u16 dat = cycle_line_pipe[hpos]; - do_sprite_fetch(hpos, dat); - } - if (hpos == sprbplconflict_hpos2) { - decide_bpl_fetch(hpos + 1); - decide_blitter(hpos + 1); - int num = sprbplconflict_dat & 7; - struct sprite *s = &spr[num]; -#ifdef DEBUGGER - int slot = (sprbplconflict_dat & 8) != 0; - int mode = (sprbplconflict_dat & 0x10) != 0; - if (debug_dma) { - record_dma_read(num * 8 + 0x140 + mode * 4 + slot * 2, s->pt, hpos, vpos, DMARECORD_SPRITE, num); - record_dma_event(DMA_EVENT_SPECIAL, hpos, vpos); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(s->pt, MW_MASK_SPR_0 << num, num * 8 + 0x140 + mode * 4 + slot * 2, num * 4 + 0x120); - } -#endif - if (hpos == sprbplconflict_hpos2) { - s->pt += sprite_width / 8; - } - } - } - hpos++; - } - last_decide_sprite_hpos = endhpos; -} - -static void init_sprites(void) -{ - for (int i = 0; i < MAX_SPRITES; i++) { - struct sprite *s = &spr[i]; - memset(s, 0, sizeof(struct sprite)); - } -} - -// line=0 -static void init_hardware_frame(void) -{ - if (!harddis_v) { - vdiwstate = diw_states::DIW_waiting_start; - vdiw_change(0); - } -} - -static int calculate_lineno(int vp) -{ - int lineno = vp; - if (lineno >= MAXVPOS) { - lineno %= MAXVPOS; - } - nextline_how = nln_normal; - if (doflickerfix_active()) { - lineno *= 2; - lineno++; - } else if (!interlace_seen && doublescan <= 0 && currprefs.gfx_vresolution && currprefs.gfx_pscanlines > 1) { - lineno *= 2; - if (display_vsync_counter & 1) { - lineno++; - nextline_how = currprefs.gfx_pscanlines == 3 ? nln_lower_black_always : nln_lower_black; - } else { - nextline_how = currprefs.gfx_pscanlines == 3 ? nln_upper_black_always : nln_upper_black; - } - } else if ((doublescan <= 0 || interlace_seen > 0) && currprefs.gfx_vresolution && currprefs.gfx_iscanlines) { - lineno *= 2; - if (interlace_seen) { - if (!lof_display) { - lineno++; - nextline_how = currprefs.gfx_iscanlines == 2 ? nln_lower_black_always : nln_lower_black; - } else { - nextline_how = currprefs.gfx_iscanlines == 2 ? nln_upper_black_always : nln_upper_black; - } - } else { - nextline_how = currprefs.gfx_vresolution > VRES_NONDOUBLE && currprefs.gfx_pscanlines == 1 ? nln_nblack : nln_doubled; - } - } else if (currprefs.gfx_vresolution && (doublescan <= 0 || interlace_seen > 0)) { - lineno *= 2; - if (interlace_seen) { - if (!lof_display) { - lineno++; - nextline_how = nln_lower; - } else { - nextline_how = nln_upper; - } - } else { - nextline_how = currprefs.gfx_vresolution > VRES_NONDOUBLE && currprefs.gfx_pscanlines == 1 ? nln_nblack : nln_doubled; - } - } - return lineno; -} - -// vsync start -void init_hardware_for_drawing_frame(void) -{ - /* Avoid this code in the first frame after a customreset. */ - if (prev_sprite_entries) { - int first_pixel = prev_sprite_entries[0].first_pixel; - int npixels = prev_sprite_entries[prev_next_sprite_entry].first_pixel - first_pixel; - if (npixels > 0) { - memset(spixels + first_pixel, 0, npixels * sizeof *spixels); - memset(spixstate.stb + first_pixel, 0, npixels * sizeof *spixstate.stb); - if (aga_mode) { - memset(spixstate.stbfm + first_pixel, 0, npixels * sizeof *spixstate.stbfm); - } - } - } - - prev_next_sprite_entry = next_sprite_entry; - next_sprite_entry = 0; - end_sprite_entry = MAX_SPRITE_ENTRIES - 2; - spixels_max = sizeof(spixels) / sizeof(*spixels) - MAX_PIXELS_PER_LINE; - - linear_vpos = vpos; - next_lineno = calculate_lineno(linear_vpos); - last_color_change = 0; - next_color_change = 0; - next_color_entry = 0; - remembered_color_entry = -1; - - prev_sprite_entries = sprite_entries[current_change_set]; - curr_sprite_entries = sprite_entries[current_change_set ^ 1]; - prev_color_changes = color_changes[current_change_set]; - curr_color_changes = color_changes[current_change_set ^ 1]; - prev_color_tables = color_tables[current_change_set]; - curr_color_tables = color_tables[current_change_set ^ 1]; - - prev_drawinfo = line_drawinfo[current_change_set]; - curr_drawinfo = line_drawinfo[current_change_set ^ 1]; - current_change_set ^= 1; - - color_src_match = color_dest_match = -1; - - /* Use both halves of the array in alternating fashion. */ - curr_sprite_entries[0].first_pixel = current_change_set * MAX_SPR_PIXELS; - next_sprite_forced = 1; -} - -static frame_time_t rpt_vsync(int adjust) -{ - frame_time_t curr_time = read_processor_time(); - frame_time_t v = curr_time - vsyncwaittime + adjust; - if (v > syncbase || v < -syncbase) { - vsyncmintime = vsyncmaxtime = vsyncwaittime = curr_time; - v = 0; - } - return v; -} - -static void rtg_vsync (void) -{ -#ifdef PICASSO96 - frame_time_t start, end; - start = read_processor_time(); - picasso_handle_vsync(); - end = read_processor_time(); - frameskiptime += end - start; -#endif -} - -static void rtg_vsynccheck(void) -{ -#if 0 - if (vblank_found_rtg) { - vblank_found_rtg = false; - rtg_vsync(); - } -#endif -} - - -static void maybe_process_pull_audio(void) -{ - audio_finish_pull(); -} - -static bool crender_screen(int monid, int mode, bool immediate) -{ - bool v = render_screen(monid, mode, immediate); - if (display_reset > 0) { - display_reset--; - } - return v; -} - -// moving average algorithm -#define MAVG_MAX_SIZE 128 -struct mavg_data -{ - frame_time_t values[MAVG_MAX_SIZE]; - int size; - int offset; - frame_time_t mavg; -}; - -static void mavg_clear (struct mavg_data *md) -{ - md->size = 0; - md->offset = 0; - md->mavg = 0; -} - -static frame_time_t mavg(struct mavg_data *md, frame_time_t newval, int size) -{ - if (md->size < size) { - md->values[md->size++] = newval; - md->mavg += newval; - } else { - md->mavg -= md->values[md->offset]; - md->values[md->offset] = newval; - md->mavg += newval; - md->offset++; - if (md->offset >= size) { - md->offset -= size; - } - } - return md->mavg / md->size; -} - -#define MAVG_VSYNC_SIZE 128 -#ifdef DEBUGGER -extern int log_vsync, debug_vsync_min_delay, debug_vsync_forced_delay; -#endif -static bool framewait(void) -{ - struct amigadisplay *ad = &adisplays[0]; - frame_time_t curr_time; - frame_time_t start; - int vs = isvsync_chipset(); - int status = 0; - - events_reset_syncline(); - - static struct mavg_data ma_frameskipt; - frame_time_t frameskipt_avg = mavg(&ma_frameskipt, frameskiptime, MAVG_VSYNC_SIZE); - - frameskiptime = 0; - - if (vs > 0) { - - static struct mavg_data ma_legacy; - static frame_time_t vsync_time; - frame_time_t t; - - curr_time = read_processor_time(); - vsyncwaittime = vsyncmaxtime = curr_time + vsynctimebase; - if (!frame_rendered && !ad->picasso_on) { - frame_rendered = crender_screen(0, 1, false); - } - - start = read_processor_time(); - t = 0; - if (start - vsync_time >= 0 && start - vsync_time < vsynctimebase) { - t += start - vsync_time; - } - - if (!frame_shown) { - show_screen(0, 1); - if (currprefs.gfx_apmode[0].gfx_strobo) { - show_screen(0, 4); - } - } - - maybe_process_pull_audio(); - - frame_time_t legacy_avg = mavg(&ma_legacy, t, MAVG_VSYNC_SIZE); - if (t > legacy_avg) { - legacy_avg = t; - } - t = legacy_avg; - -#ifdef DEBUGGER - if (debug_vsync_min_delay && t < debug_vsync_min_delay * vsynctimebase / 100) { - t = debug_vsync_min_delay * vsynctimebase / 100; - } - if (debug_vsync_forced_delay > 0) { - t = debug_vsync_forced_delay * vsynctimebase / 100; - } -#endif - - vsync_time = read_processor_time(); - if (t > vsynctimebase * 2 / 3) { - t = vsynctimebase * 2 / 3; - } - - if (currprefs.m68k_speed < 0) { - vsynctimeperline = (vsynctimebase - t) / (maxvpos_display + 1); - } else { - vsynctimeperline = (vsynctimebase - t) / 3; - } - - if (vsynctimeperline < 1) { - vsynctimeperline = 1; - } - -#ifdef DEBUGGER - if (0 || (log_vsync & 2)) { - write_log (_T("%06d %06d/%06d %03d%%\n"), t, vsynctimeperline, vsynctimebase, t * 100 / vsynctimebase); - } -#endif - - frame_shown = true; - return 1; - - } else if (vs < 0) { - - if (!vblank_hz_state) { - return status != 0; - } - - frame_shown = true; - status = 1; - return status != 0; - } - - status = 1; - - int clockadjust = 0; - frame_time_t vstb = vsynctimebase; - - if (currprefs.m68k_speed < 0 && !cpu_sleepmode && !currprefs.cpu_memory_cycle_exact) { - - if (!frame_rendered && !ad->picasso_on) - frame_rendered = crender_screen(0, 1, false); - - if (currprefs.m68k_speed_throttle) { - // this delay can safely overshoot frame time by 1-2 ms, following code will compensate for it. - for (;;) { - curr_time = read_processor_time(); - if (vsyncwaittime - curr_time <= 0 || vsyncwaittime - curr_time > 2 * vsynctimebase) { - break; - } - rtg_vsynccheck (); - if (cpu_sleep_millis(1) < 0) { - curr_time = read_processor_time(); - break; - } - } - } else { - curr_time = read_processor_time(); - } - - int max; - frame_time_t adjust = 0; - if (curr_time - vsyncwaittime > 0 && curr_time - vsyncwaittime < vstb / 2) { - adjust += curr_time - vsyncwaittime; - } - adjust += clockadjust; - max = (int)(vstb * (1000.0 + currprefs.m68k_speed_throttle) / 1000.0 - adjust); - vsyncwaittime = curr_time + vstb - adjust; - vsyncmintime = curr_time; - - if (max < 0) { - max = 0; - vsynctimeperline = 1; - } else { - vsynctimeperline = max / (maxvpos_display + 1); - } - vsyncmaxtime = curr_time + max; - - if (0) - write_log (_T("%06d:%06d/%06d %d %d\n"), adjust, vsynctimeperline, vstb, max, maxvpos_display); - - } else { - - frame_time_t t = 0; - - start = read_processor_time(); - if (!frame_rendered && !ad->picasso_on) { - frame_rendered = crender_screen(0, 1, false); - t = read_processor_time() - start; - } - if (!currprefs.cpu_thread) { - while (!currprefs.turbo_emulation) { - float v = rpt_vsync(clockadjust) / (syncbase / 1000.0f); - if (v >= -FRAMEWAIT_MIN_MS) - break; - rtg_vsynccheck(); - maybe_process_pull_audio(); - if (cpu_sleep_millis(1) < 0) - break; - } - while (rpt_vsync(clockadjust) < 0) { - rtg_vsynccheck(); - if (audio_is_pull_event()) { - maybe_process_pull_audio(); - break; - } - } - } - evt_t tnow = read_processor_time(); - idletime += tnow - start; - curr_time = tnow; - vsyncmintime = curr_time; - vsyncmaxtime = vsyncwaittime = curr_time + vstb; - if (frame_rendered) { - show_screen(0, 0); - t += read_processor_time() - curr_time; - } - t += frameskipt_avg; - - vsynctimeperline = (vstb - t) / FRAMEWAIT_SPLIT; - if (vsynctimeperline < 1) { - vsynctimeperline = 1; - } else if (vsynctimeperline > vstb / FRAMEWAIT_SPLIT) { - vsynctimeperline = vstb / FRAMEWAIT_SPLIT; - } - - frame_shown = true; - - } - return status != 0; -} - -static void reset_cpu_idle(void) -{ - cpu_sleepmode_cnt = 0; - if (cpu_sleepmode) { - cpu_sleepmode = 0; - //write_log(_T("woken\n")); - } -} - -#define FPSCOUNTER_MAVG_SIZE 10 -static struct mavg_data fps_mavg, idle_mavg; - -void fpscounter_reset(void) -{ - mavg_clear(&fps_mavg); - mavg_clear(&idle_mavg); - bogusframe = 2; - lastframetime = read_processor_time(); - idletime = 0; -} - -static void fpscounter(bool frameok) -{ - frame_time_t now, last; - - now = read_processor_time(); - last = now - lastframetime; - lastframetime = now; - - if (bogusframe || last < 0) { - return; - } - - mavg(&fps_mavg, last / 10, FPSCOUNTER_MAVG_SIZE); - mavg(&idle_mavg, idletime / 10, FPSCOUNTER_MAVG_SIZE); - idletime = 0; - - frametime += last; - timeframes++; - - if ((timeframes & 7) == 0) { - double idle = 1000 - (idle_mavg.mavg == 0 ? 0.0 : (double)idle_mavg.mavg * 1000.0 / vsynctimebase); - int fps = fps_mavg.mavg == 0 ? 0 : (int)(syncbase * 10 / fps_mavg.mavg); - if (fps > 99999) - fps = 99999; - if (idle < 0) - idle = 0; - if (idle > 100 * 10) - idle = 100 * 10; - if (fake_vblank_hz * 10 > fps) { - double mult = (double)fake_vblank_hz * 10.0 / fps; - idle *= mult; - } - if (currprefs.turbo_emulation && idle < 100 * 10) - idle = 100 * 10; - gui_data.fps = fps; - gui_data.idle = (int)idle; - gui_data.fps_color = nosignal_status == 1 ? 2 : (nosignal_status == 2 ? 3 : (frameok ? 0 : 1)); - if ((timeframes & 15) == 0) { - gui_fps(fps, (int)idle, gui_data.fps_color); - } - } -} - -// vsync functions that are not hardware timing related -// called when vsync starts which is not necessarily last line -// it can line 0 or even later. -static void vsync_handler_render(void) -{ - struct amigadisplay *ad = &adisplays[0]; - -#if 1 - if (currprefs.m68k_speed < 0) { - if (regs.stopped) { - if (cpu_last_stop_vpos >= 0) { - cpu_stopped_lines += maxvpos - cpu_last_stop_vpos; - } else { - cpu_stopped_lines = 0; - } - } - int mv = 12 - currprefs.cpu_idle / 15; - if (mv >= 1 && mv <= 11) { - mv = 11 - mv; - if (cpu_stopped_lines >= maxvpos * (mv * 10) / 100) { - cpu_sleepmode_cnt++; - if (cpu_sleepmode_cnt >= 50) { - cpu_sleepmode_cnt = 50; - if (!cpu_sleepmode) { - cpu_sleepmode = 1; - //write_log(_T("sleep\n")); - } - } - } else { - reset_cpu_idle(); - } - } else { - reset_cpu_idle(); - } - } - if (regs.halted < 0) { - reset_cpu_idle(); - } - cpu_last_stop_vpos = 0; - cpu_stopped_lines = 0; -#endif - -#ifdef PICASSO96 - if (isvsync_rtg() >= 0) { - rtg_vsync(); - } -#endif - - if (!vsync_rendered) { - frame_time_t start, end; - start = read_processor_time(); - vsync_handle_redraw(lof_store, lof_changed, bplcon0, bplcon3, isvsync_chipset() >= 0, initial_frame); - initial_frame = false; - vsync_rendered = true; - end = read_processor_time(); - frameskiptime += end - start; - } - - linear_vpos = vpos; - next_lineno = calculate_lineno(linear_vpos); - - bool frameok = framewait(); - - if (!ad->picasso_on) { - if (!frame_rendered && vblank_hz_state) { - frame_rendered = crender_screen(0, 1, false); - } - if (frame_rendered && !frame_shown) { - frame_shown = show_screen_maybe(0, isvsync_chipset () >= 0); - } - } - - fpscounter(frameok); - - bool waspaused = false; - while (handle_events()) { - if (!waspaused) { - if (crender_screen(0, 1, true)) { - show_screen(0, 0); - } - waspaused = true; - } - // we are paused, do all config checks but don't do any emulation - if (vsync_handle_check()) { - redraw_frame(); - if (crender_screen(0, 1, true)) { - show_screen(0, 0); - } - } - config_check_vsync(); - } - - vsync_rendered = false; - frame_shown = false; - frame_rendered = false; - - if (quit_program > 0) { - /* prevent possible infinite loop at wait_cycles().. */ - ad->framecnt = 0; - reset_decisions_scanline_start(); - reset_decisions_hsync_start(); - return; - } - - if (vblank_hz_mult > 0) { - vblank_hz_state ^= 1; - } else { - vblank_hz_state = 1; - } - - nextline_how = nln_normal; - - //checklacecount (bplcon0_interlace_seen || lof_lace); -} - -static bool vsync_display_rendered; - -static void vsync_display_render(void) -{ - if (!vsync_display_rendered) { - vsyncmintimepre = read_processor_time(); - vsync_handler_render(); - vsync_display_rendered = true; - } -} - -static void vsync_check_vsyncmode(void) -{ - if (varsync_maybe_changed[0] == 1 || varsync_maybe_changed[1] == 1 || varhblank_lines == -1) { - init_hz_normal(); - } else if (varsync_changed == 1 || ((beamcon0 & BEAMCON0_VARBEAMEN) && exthblank_prev != exthblank && (abs(exthblank_lines[0] - exthblank_lines[1]) > maxvpos * 3 / 4))) { - init_hz_normal(); - } else if (vpos_count > 0 && abs(vpos_count - vpos_count_diff) > 1 && vposw_change && vposw_change < 4) { - init_hz_vposw(); - } else if (interlace_changed || changed_chipset_refresh() || lof_changed) { - compute_framesync(); - display_reset = 2; - } - if (varsync_changed > 0) { - varsync_changed--; - } - varsync_maybe_changed[0] = 0; - varsync_maybe_changed[1] = 0; - varhblank_lines = 0; - exthblank_lines[0] = exthblank_lines[1] = 0; - exthblank_prev = exthblank; -} - -static void check_display_mode_change(void) -{ - struct amigadisplay *ad = &adisplays[0]; - int vt, ht, hs, vs; - - if (new_beamcon0 & BEAMCON0_VARBEAMEN) { - vt = vtotal; - ht = htotal; - } else { - vt = maxvpos; - ht = maxhpos; - } - if (new_beamcon0 & (BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN)) { - hs = hsstrt; - } else { - hs = 18; - } - if (new_beamcon0 & (BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) { - vs = vsstrt; - } else { - vs = (new_beamcon0 & BEAMCON0_PAL) ? 2 : 3; - } - - // recalculate display if vtotal, htotal, hsync start or vsync start changed > 1 - if ((abs(vt - vt_old) > 1 || abs(ht - ht_old) > 1 || abs(hs - hs_old) > 1 || abs(vs - vs_old) > 1) && vt_old && ht_old) { - varsync_changed = 1; - if (!ad->picasso_on) { - nosignal_trigger = true; - display_reset = 2; - } - } - - vt_old = vt; - ht_old = ht; - vs_old = vs; - hs_old = hs; -} - -// emulated hardware vsync -static void vsync_handler_post(void) -{ - int monid = 0; - static frame_time_t prevtime; - - //write_log (_T("%d %d %d\n"), vsynctimebase, read_processor_time () - vsyncmintime, read_processor_time () - prevtime); - prevtime = read_processor_time(); - - check_nocustom(); - -#if CUSTOM_DEBUG > 1 - if ((intreq & 0x0020) && (intena & 0x0020)) - write_log(_T("vblank interrupt not cleared\n")); -#endif - DISK_vsync (); - -#ifdef WITH_LUA - uae_lua_run_handler("on_uae_vsync"); -#endif - - if (bplcon0 & 4) { - lof_store = lof_store ? 0 : 1; - } - if ((bplcon0 & 2) && currprefs.genlock) { - genlockvtoggle = lof_store ? 1 : 0; - } - - if (issyncstopped()) { - nosignal_trigger = true; - } - // Inverted CSYNC - if ((beamcon0 & BEAMCON0_CSYTRUE) && currprefs.cs_hvcsync == 1) { - nosignal_trigger = true; - } - // BLANKEN set: horizontal blanking is merged with CSYNC - if ((beamcon0 & BEAMCON0_BLANKEN) && currprefs.cs_hvcsync == 1) { - nosignal_trigger = true; - } - if ((beamcon0 & BEAMCON0_CSCBEN) && currprefs.cs_hvcsync == 2) { - nosignal_trigger = true; - } - if (beamcon0 & BEAMCON0_VARBEAMEN) { - if (htotal < 50 || htotal > 250) { - nosignal_trigger = true; - } - if (vtotal < 100 || vtotal > 1000) { - nosignal_trigger = true; - } - // CSY output is invalid (no vsync part included) if HTOTAL is too small + hardwired CSYNC. - int csyh = (beamcon0 & 0x20) ? 0x8c : 0x8d; - if (htotal < csyh && !(beamcon0 & BEAMCON0_VARCSYEN) && currprefs.cs_hvcsync == 1) { - nosignal_trigger = true; - } - } - // Too small or large HSYNC - if (beamcon0 & (BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN)) { - if (hsstop < hsstrt) { - hsstop += maxhpos; - } - if (hsstop - hsstrt <= 2 || hsstop - hsstrt > 80) { - nosignal_trigger = true; - } - } - // Too small or large VSYNC - if (beamcon0 & (BEAMCON0_VARVSYEN | BEAMCON0_VARCSYEN)) { - if (vsstop < vsstrt) { - vsstop += maxvpos; - } - if (vsstop - vsstrt <= 1 || vsstop - vsstrt > 80) { - nosignal_trigger = true; - } - } - - if (lof_prev_lastline != lof_lastline) { - if (lof_togglecnt_lace < LOF_TOGGLES_NEEDED) { - lof_togglecnt_lace++; - } - if (lof_togglecnt_lace >= LOF_TOGGLES_NEEDED) { - lof_togglecnt_nlace = 0; - } - } else { - // only 1-2 vblanks with bplcon0 lace bit set? - // lets check if lof has changed - if (!(bplcon0 & 4) && lof_togglecnt_lace > 0 && lof_togglecnt_lace < LOF_TOGGLES_NEEDED && !interlace_seen) { - lof_changed = 1; - } - lof_togglecnt_nlace = LOF_TOGGLES_NEEDED; - lof_togglecnt_lace = 0; -#if 0 - if (lof_togglecnt_nlace < LOF_TOGGLES_NEEDED) - lof_togglecnt_nlace++; - if (lof_togglecnt_nlace >= LOF_TOGGLES_NEEDED) - lof_togglecnt_lace = 0; -#endif - } - lof_prev_lastline = lof_lastline; - if (lof_togglecnt_lace >= LOF_TOGGLES_NEEDED) { - interlace_changed = notice_interlace_seen(monid, true); - if (interlace_changed) { - notice_screen_contents_lost(monid); - } - } else if (lof_togglecnt_nlace >= LOF_TOGGLES_NEEDED) { - interlace_changed = notice_interlace_seen(monid, false); - if (interlace_changed) { - notice_screen_contents_lost(monid); - } - } - if (lof_changing) { - // if not interlace and LOF was changed during previous field but LOF is now same as beginning of previous field: do nothing - if (!(bplcon0 & 4) && ((lof_changing > 0 && prevlofs[0]) || (lof_changing < 0 && !prevlofs[0]))) { - lof_changing = 0; - } - } - if (lof_changing) { - if (lof_store != (prevlofs[0] ? 1 : 0) && prevlofs[0] == prevlofs[1] && prevlofs[1] == prevlofs[2]) { - // resync if LOF was not toggling previously - nosignal_trigger = true; - } - - // still same? Trigger change now. - if ((!lof_store && lof_changing < 0) || (lof_store && lof_changing > 0)) { - lof_changed_previous_field++; - lof_changed = 1; - // lof toggling? decide as interlace. - if (lof_changed_previous_field >= LOF_TOGGLES_NEEDED) { - lof_changed_previous_field = LOF_TOGGLES_NEEDED; - if (lof_lace == false) { - lof_lace = true; - } else { - lof_changed = 0; - } - } - if (bplcon0 & 4) { - lof_changed = 0; - } - } - lof_changing = 0; - } else { - lof_changed_previous_field = 0; - lof_lace = false; - } - - prevlofs[2] = prevlofs[1]; - prevlofs[1] = prevlofs[0]; - prevlofs[0] = lof_store; - -#ifdef DEBUGGER - if (debug_copper) { - record_copper_reset(); - } - if (debug_dma) { - record_dma_reset(0); - } -#endif - -#ifdef PICASSO96 - if (p96refresh_active) { - vpos_count = p96refresh_active; - vpos_count_diff = p96refresh_active; - vtotal = vpos_count; - } -#endif - - devices_vsync_post(); - - check_display_mode_change(); - - vsync_check_vsyncmode(); - - if (bogusframe > 0) { - bogusframe--; - } - - if (nosignal_status < 0) { - nosignal_status = 0; - } - if (nosignal_cnt) { - nosignal_cnt--; - if (nosignal_cnt == 0) { - nosignal_status = -1; - } - } - if (nosignal_trigger) { - struct amigadisplay *ad = &adisplays[0]; - nosignal_trigger = false; - if (!ad->specialmonitoron) { - if (currprefs.gfx_monitorblankdelay > 0) { - nosignal_status = 1; - nosignal_cnt = (int)(currprefs.gfx_monitorblankdelay / (1000.0f / vblank_hz)); - if (nosignal_cnt <= 0) { - nosignal_cnt = 1; - } - } else { - nosignal_status = 2; - nosignal_cnt = (int)(vblank_hz / 2); - } - } - } - - config_check_vsync(); - if (timehack_alive > 0) { - timehack_alive--; - } - - lof_changed = 0; - vposw_change = 0; - bplcon0_interlace_seen = false; - - vsync_handle_check(); - - init_hardware_frame(); - - vsync_cycles = get_cycles(); -} - -static void copper_check(int n) -{ - if (cop_state.state == COP_wait) { - int vp = vpos & (((cop_state.ir[1] >> 8) & 0x7F) | 0x80); - if (vp < cop_state.vcmp) { - if (copper_enabled_thisline) { - write_log(_T("COPPER BUG %d: vp=%d vpos=%d vcmp=%d thisline=%d\n"), n, vp, vpos, cop_state.vcmp, copper_enabled_thisline); - } - } - } -} - -static void reset_scandoubler_sync(int hpos) -{ - last_decide_line_hpos = hpos; - last_decide_sprite_hpos = hpos; - last_fetch_hpos = hpos; - last_copper_hpos = hpos; - last_diw_hpos = hpos; - last_sprite_hpos = hpos; - sprites_enabled_this_line = false; - plfstrt_sprite = 0x100; - bprun = 0; - bprun_cycle = 0; - ddf_stopping = 0; - int hnew = hpos - (REFRESH_FIRST_HPOS - HARDWIRED_DMA_TRIGGER_HPOS + 2); - hdiw_denisecounter = ((hnew + 0) & 0xff) << CCK_SHRES_SHIFT; - last_sprite_hpos = last_sprite_point = (((hnew + 0) & 0xff) << 1) + 1; -} - - -/* - -0 0 - -1 1 -- -2 2 - -3 3 -- -4 4 - -5 5 -- - -0 x -+ -1 0 -- -2 1 - -3 2 -- -4 3 - -5 4 -- - -*/ - -static void hsync_scandoubler(int hpos) -{ - uae_u16 odmacon = dmacon; - int ocop = copper_enabled_thisline; - uaecptr bpltmp[MAX_PLANES], bpltmpx[MAX_PLANES]; - int lof = lof_display; - - if (vb_start_line > 2) { - return; - } - - scandoubled_line = 1; - line_disabled |= 8; - last_hdiw = 0 - 1; - - for (int i = 0; i < MAX_PLANES; i++) { - bpltmp[i] = bplpt[i]; - bpltmpx[i] = bplptx[i]; - uaecptr pb1 = prevbpl[lof][vpos][i]; - uaecptr pb2 = prevbpl[1 - lof][vpos][i]; - if (pb1 && pb2) { - int diff = pb1 - pb2; - if (lof) { - if (bplcon0 & 4) { - bplpt[i] = pb1 - diff; - } - } else { - if (bplcon0 & 4) { - bplpt[i] = pb1; - } else { - bplpt[i] = bplpt[i] - diff; - } - } - } - } - - uae_u8 cycle_line_slot_tmp[MAX_CHIPSETSLOTS]; - uae_u16 cycle_line_pipe_tmp[MAX_CHIPSETSLOTS]; - - memcpy(cycle_line_slot_tmp, cycle_line_slot, sizeof(uae_u8) * MAX_CHIPSETSLOTS); - memcpy(cycle_line_pipe_tmp, cycle_line_pipe, sizeof(uae_u16) * MAX_CHIPSETSLOTS); - - reset_decisions_scanline_start(); - reset_scandoubler_sync(hpos); - reset_decisions_hsync_start(); - - // Bitplane and sprites only - dmacon = odmacon & (DMA_MASTER | DMA_BITPLANE | DMA_SPRITE); - copper_enabled_thisline = 0; - - // copy color changes - struct draw_info *dip1 = curr_drawinfo + next_lineno - 1; - for (int idx1 = dip1->first_color_change; idx1 < dip1->last_color_change; idx1++) { - struct color_change *cs2 = &curr_color_changes[idx1]; - struct color_change *cs1 = &curr_color_changes[next_color_change]; - memcpy(cs1, cs2, sizeof(struct color_change)); - next_color_change++; - } - curr_color_changes[next_color_change].regno = -1; - - hpos_hsync_extra = 0; - finish_partial_decision(maxhpos); - hpos_hsync_extra = maxhpos; - finish_decisions(hpos); - hsync_record_line_state(next_lineno, nln_normal, thisline_changed); - - scandoubled_line = 0; - line_disabled &= ~8; - - dmacon = odmacon; - copper_enabled_thisline = ocop; - - memcpy(cycle_line_slot, cycle_line_slot_tmp, sizeof(uae_u8) * MAX_CHIPSETSLOTS); - memcpy(cycle_line_pipe, cycle_line_pipe_tmp, sizeof(uae_u16) * MAX_CHIPSETSLOTS); - - for (int i = 0; i < MAX_PLANES; i++) { - bplpt[i] = bpltmp[i]; - bplptx[i] = bpltmpx[i]; - } - - reset_decisions_scanline_start(); - reset_scandoubler_sync(hpos); -} - -static void dmal_emu(uae_u32 val) -{ - // Disk and Audio DMA bits are ignored by Agnus. Including DMA master bit. - int hpos = current_hpos(); - - if (currprefs.cpu_memory_cycle_exact) { - // BPL conflict - if (bitplane_dma_access(hpos, 0)) { - return; - } - } - int dmalbits = val & 3; - int dmalpos = val >> 8; - - if (dmalpos >= 6 && dmalpos < 14) { - dmalpos -= 6; - int nr = dmalpos / 2; - uaecptr pt = audio_getpt(nr, (dmalbits & 1) != 0); - if (dmal_ce) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0xaa + nr * 16, pt, hpos, vpos, DMARECORD_AUDIO, nr); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(pt, MW_MASK_AUDIO_0 << nr, 0xaa + nr * 16, 0xa0 + nr * 16); - } -#endif - } - uae_u16 dat = chipmem_wget_indirect(pt); - if (dmal_ce) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(dat); - } - if (memwatch_enabled) { - debug_getpeekdma_value(dat); - } -#endif - } - regs.chipset_latch_rw = last_custom_value = dat; - AUDxDAT(nr, dat, pt); - } else if (dmalpos >= 0 && dmalpos < 6) { - uae_u16 dat = 0; - int s = (dmalpos / 2); - int w = (dmalbits & 3) == 3; - // disk_fifostatus() needed in >100% disk speed modes - if (w) { - // write to disk - if (disk_fifostatus() <= 0) { - uaecptr pt = disk_getpt(); - if (dmal_ce) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(0x26, pt, hpos, vpos, DMARECORD_DISK, dmalpos / 2); - } - if (memwatch_enabled) { - debug_getpeekdma_chipram(pt, MW_MASK_DISK, 0x26, 0x20); - } -#endif - } - dat = chipmem_wget_indirect(pt); - if (dmal_ce) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read_value(dat); - } - if (memwatch_enabled) { - debug_getpeekdma_value(dat); - } -#endif - } - regs.chipset_latch_rw = last_custom_value = dat; - DSKDAT(dat); - } - } else { - // read from disk - if (disk_fifostatus() >= 0) { - uaecptr pt = disk_getpt(); - dat = DSKDATR(s); - if (dmal_ce) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_write(0x08, dat, pt, hpos, vpos, DMARECORD_DISK, dmalpos / 2); - } - if (memwatch_enabled) { - debug_putpeekdma_chipram(pt, dat, MW_MASK_DISK, 0x08, 0x20); - } -#endif - } - chipmem_wput_indirect(pt, dat); - regs.chipset_latch_rw = last_custom_value = dat; - } - } - } else { - write_log(_T("invalid DMAL position %d\n"), dmalpos); - } -} - -static void dmal_func(uae_u32 v) -{ - dmal_emu(v); - events_dmal(0); -} - -static void dmal_func2(uae_u32 v) -{ - while (dmal) { - if (dmal & 3) { - dmal_emu((dmal_hpos << 8) | (dmal & 3)); - } - dmal_hpos += 2; - dmal >>= 2; - } -} - -static void events_dmal(int hpos) -{ - dmal_ce = false; - if (!dmal) - return; - if (currprefs.cachesize) { - dmal_func2(0); - } else if (currprefs.cpu_compatible) { - while (dmal) { - if (dmal & 3) - break; - hpos += 2; - dmal >>= 2; - dmal_hpos += 2; - } - dmal_ce = true; - event2_newevent2(hpos, (dmal_hpos << 8) | (dmal & 3), dmal_func); - dmal &= ~3; - } else { - event2_newevent2(hpos, 0, dmal_func2); - } -} - -static void events_dmal_hsync2(uae_u32 v) -{ - int dmal_first = DMAL_FIRST_HPOS - v; - // 3 disk + 4 audio - uae_u16 dmalt = audio_dmal(); - dmalt <<= (3 * 2); - dmalt |= disk_dmal(); - dmalt &= dmal_htotal_mask; - dmal |= dmalt; - dmal_alloc_mask = dmal; - if (!dmal) { - return; - } - if (hstrobe_conflict) { - return; - } - dmal_hpos = 0; - if (currprefs.cpu_memory_cycle_exact) { - for (int i = 0; i < 3 * 2 + 4 * 2; i += 2) { - if (dmal & (3 << i)) { - alloc_cycle_ext(DMAL_FIRST_HPOS + i, CYCLE_MISC); - } - } - } - events_dmal(dmal_first); -} - -static void events_dmal_hsync(void) -{ - if (currprefs.cpu_compatible) { - int delay = REFRESH_FIRST_HPOS + 1; - event2_newevent2(delay, delay, events_dmal_hsync2); - } else { - events_dmal_hsync2(0); - } -} - -static void lightpen_trigger_func(uae_u32 v) -{ - vpos_lpen = vpos; - hpos_lpen = v; - hhpos_lpen = HHPOSR(); - lightpen_triggered = 1; -} - -static bool is_custom_vsync (void) -{ - int vp = vpos + 1; - int vpc = vpos_count + 1; - /* Agnus vpos counter keeps counting until it wraps around if VPOSW writes put it past maxvpos */ - if (vp >= maxvpos_total) - vp = 0; - if (vp == maxvpos + lof_store || vp == maxvpos + lof_store + 1 || vpc >= MAXVPOS) { - // vpos_count >= MAXVPOS just to not crash if VPOSW writes prevent vsync completely - return true; - } - return false; -} - -static bool do_render_slice(int mode, int slicecnt, int lastline) -{ - draw_lines(lastline, slicecnt); - crender_screen(0, mode, true); - return true; -} - -static bool do_display_slice(void) -{ - show_screen(0, -1); - inputdevice_hsync(true); - return true; -} - -static void reset_autoscale(void) -{ - first_bpl_vpos = -1; - if (first_bplcon0 != first_bplcon0_old) { - vertical_changed = horizontal_changed = true; - } - first_bplcon0_old = first_bplcon0; - - if (first_planes_vpos != first_planes_vpos_old || - last_planes_vpos != last_planes_vpos_old) { - vertical_changed = true; - } - first_planes_vpos_old = first_planes_vpos; - last_planes_vpos_old = last_planes_vpos; - - if (diwfirstword_total != diwfirstword_total_old || - diwlastword_total != diwlastword_total_old || - ddffirstword_total != ddffirstword_total_old || - ddflastword_total != ddflastword_total_old) { - horizontal_changed = true; - } - diwfirstword_total_old = diwfirstword_total; - diwlastword_total_old = diwlastword_total; - ddffirstword_total_old = ddffirstword_total; - ddflastword_total_old = ddflastword_total; - - first_planes_vpos = 0; - last_planes_vpos = 0; - diwfirstword_total = max_diwlastword; - diwlastword_total = 0; - ddffirstword_total = max_diwlastword; - ddflastword_total = 0; - plflastline_total = 0; - plffirstline_total = current_maxvpos(); - first_bplcon0 = 0; - autoscale_bordercolors = 0; -} - -static void hautoscale_check(int vp) -{ - int vp_start = vp; - int vp_end = vp + 1; - // border detection/autoscale - if (GET_PLANES(bplcon0) > 0 && dmaen(DMA_BITPLANE) && !vb_state && !vb_end_line && !vb_start_line) { - if (first_bplcon0 == 0) { - first_bplcon0 = bplcon0; - } - if (vp_end > last_planes_vpos) { - last_planes_vpos = vp_end; - } - if (vp_start >= minfirstline && first_planes_vpos == 0) { - first_planes_vpos = vp_start; - } else if (vp_end >= current_maxvpos() - 1) { - last_planes_vpos = current_maxvpos(); - } - } - if (diw_change == 0) { - if (vp_start >= first_planes_vpos && vp_end <= last_planes_vpos) { - int diwfirstword_lores = diwfirstword; - int diwlastword_lores = diwlastword; - // >0x1c7? Calculate "real" right edge for scaling modes - if (diwlastword_lores < min_diwlastword && diwfirstword_lores >= 2) { - if (diwlastword_lores < diwfirstword_lores) { - diwlastword_lores = max_diwlastword + (diwlastword_lores - 2); - } else { - diwlastword_lores = min_diwlastword; - } - } - if (diwlastword_lores > diwlastword_total) { - diwlastword_total = diwlastword_lores; - if (diwlastword_total > coord_diw_shres_to_window_x(hsyncstartpos)) { - diwlastword_total = coord_diw_shres_to_window_x(hsyncstartpos); - } - } - if (diwfirstword_lores < diwfirstword_total) { - diwfirstword_total = diwfirstword_lores; - if (diwfirstword_total < coord_diw_shres_to_window_x(hsyncendpos)) { - diwfirstword_total = coord_diw_shres_to_window_x(hsyncendpos); - } - firstword_bplcon1 = bplcon1; - } - } - if (vdiwstate == diw_states::DIW_waiting_stop) { - int f = 8 << fetchmode; - if (plfstrt + f < ddffirstword_total + f) { - ddffirstword_total = plfstrt + f; - } - if (plfstop + 2 * f > ddflastword_total + 2 * f) { - ddflastword_total = plfstop + 2 * f; - } - } - if ((plffirstline < plffirstline_total || (plffirstline_total == minfirstline && vp_start > minfirstline)) && plffirstline < maxvpos / 2) { - firstword_bplcon1 = bplcon1; - if (plffirstline < minfirstline) { - plffirstline_total = minfirstline; - } else { - plffirstline_total = plffirstline; - } - } - if (plflastline > plflastline_total && plflastline > plffirstline_total && plflastline > maxvpos / 2) { - plflastline_total = plflastline; - } - } - if (diw_change > 0) { - diw_change--; - } -} - -static void hsync_handlerh(bool onvsync) -{ - int hpos = current_hpos(); - - if (!custom_disabled) { - - if (doflickerfix_active()) { - finish_decisions(hpos); - hsync_record_line_state(next_lineno, nextline_how, thisline_changed); - next_lineno++; - hsync_scandoubler(hpos); - } else { - finish_decisions(hpos); - hsync_record_line_state(next_lineno, nextline_how, thisline_changed); - } - - notice_resolution_seen(GET_RES_AGNUS(bplcon0), interlace_seen != 0); - - hautoscale_check(vposh); - - next_lineno = calculate_lineno(linear_vpos); - reset_decisions_hsync_start(); - } - - linear_vpos++; - if (vpos >= minfirstline && minfirstline_linear == minfirstline) { - minfirstline_linear = linear_vpos; - } - vposh++; - - hpos_hsync_extra = 0; - estimate_last_fetch_cycle(hpos); - - if (vb_end_next_line && !ecs_denise && currprefs.gfx_overscanmode > OVERSCANMODE_OVERSCAN) { - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, set_ocs_denise_blank); - } - - eventtab[ev_hsynch].evtime = get_cycles() + HSYNCTIME; - eventtab[ev_hsynch].active = 1; - eventtab[ev_hsynch].oldcycles = get_cycles(); - events_schedule(); -} - -static void set_hpos(void) -{ - line_start_cycles = (get_cycles() + CYCLE_UNIT - 1) & ~(CYCLE_UNIT - 1); - maxhposeven_prev = maxhposeven; - maxhpos = maxhpos_short + lol; - set_maxhpos(maxhpos); - eventtab[ev_hsync].evtime = line_start_cycles + HSYNCTIME; - eventtab[ev_hsync].oldcycles = line_start_cycles; -} - -// this finishes current line -static void hsync_handler_pre(bool onvsync) -{ - if (!custom_disabled) { - - // make sure decisions are done to end of scanline - finish_partial_decision(maxhpos); - clear_bitplane_pipeline(0); - - /* reset light pen latch */ - if (vb_end_line) { - lightpen_triggered = 0; - sprite_0 = 0; - } - - if (!lightpen_triggered && (bplcon0 & 8)) { - // lightpen always triggers at the beginning of the last line - if (vb_start_line == 1) { - vpos_lpen = vpos; - hpos_lpen = 1; - hhpos_lpen = HHPOSR(); - lightpen_triggered = 1; - } else if (lightpen_enabled && !vb_state) { - int lpnum = inputdevice_get_lightpen_id(); - if (lpnum < 0) { - lpnum = 0; - } - if (lightpen_cx[lpnum] > 0 && lightpen_cy[lpnum] == vpos) { - event2_newevent_xx(-1, lightpen_cx[lpnum] * CYCLE_UNIT, lightpen_cx[lpnum], lightpen_trigger_func); - } - } - } - - hdiw_counter += maxhpos * 2; - if (!hstrobe_conflict) { - // OCS Denise freerunning horizontal counter - if (!ecs_denise && vpos == get_equ_vblank_endline() - 1) { - hdiw_counter++; - } - if (ecs_denise || vpos > get_equ_vblank_endline() || (agnusa1000 && vpos == 0)) { - hdiw_counter = maxhpos * 2; - } - } - hdiw_counter &= 511; - } - - devices_hsync(); - - if (hsyncdebug) { - sync_color_changes(maxhpos); - } - - hsync_counter++; - - int currentmaxhp = current_hpos(); -#ifdef DEBUGGER - if (debug_dma) { - record_dma_hsync(currentmaxhp); - } -#endif - // just to be sure - if (currentmaxhp > 0) { - cycle_line_slot_last = cycle_line_slot[currentmaxhp - 1]; - } else { - cycle_line_slot_last = 0; - } - set_hpos(); - - vpos_prev = vpos; - vpos++; - vpos_count++; - if (vpos >= maxvpos_total) { - vpos = 0; - } - - line_equ_freerun = !ecs_denise && vpos >= get_equ_vblank_startline() && vpos <= get_equ_vblank_endline(); - - if (onvsync) { -#ifdef DEBUGGER - if (debug_dma) { - record_dma_vsync(vpos); - } -#endif - vpos = 0; - vsync_counter++; - } - check_line_enabled(); - - hpos_hsync_extra = maxhpos; - - lol_prev = lol; - if (islinetoggle()) { - lol = lol ? 0 : 1; - estimated_cycles_next = estimated_cycles; - if (maxhpos == estimated_maxhpos[0]) { - estimated_cycles = estimated_cycles_buf0; - estimated_cycles_next = estimated_cycles_buf1; - } else if (maxhpos == estimated_maxhpos[1]) { - estimated_cycles = estimated_cycles_buf1; - estimated_cycles_next = estimated_cycles_buf0; - } - linetoggle = true; - } else { - lol = 0; - linetoggle = false; - } - memset(cycle_line_slot, 0, maxhposm1 + 1); - - // to record decisions correctly between end of scanline and start of hsync - if (!eventtab[ev_hsynch].active) { - eventtab[ev_hsynch].evtime = get_cycles() + hsyncstartpos_start_cycles * CYCLE_UNIT; - eventtab[ev_hsynch].active = 1; - events_schedule(); - } - - for (int i = 0; i < 4; i++) { - if (!(refresh_handled_slot & (1 << i))) { -#ifdef DEBUGGER - if (debug_dma) { - debug_mark_refreshed(refptr_p + i * ref_ras_add); - } -#endif - if (!refptr_preupdated) { - refptr += ref_ras_add; - } - } - } - -#ifdef DEBUGGER - debug_hsync(); -#endif -} - -// low latency vsync - -#define LLV_DEBUG 0 - -static bool sync_timeout_check(frame_time_t max) -{ -#if LLV_DEBUG - return true; -#else - frame_time_t rpt = read_processor_time(); - return rpt - max <= 0; -#endif -} - -extern int busywait; -static void scanlinesleep(int currline, int nextline) -{ - if (currline < 0) - return; - if (currline >= nextline) - return; - if (vsync_hblank) { - int diff = (int)(vsync_hblank / (nextline - currline)); - int us = 1000000 / diff; - if (us < target_sleep_nanos(-1)) { // spin if less than minimum sleep time - target_spin(nextline - currline - 1); - return; - } - } - if (busywait) { - target_spin(1); - return; - } - if (currprefs.m68k_speed < 0) - sleep_millis_main(1); - else - target_sleep_nanos(500); -} - -static void linesync_first_last_line(int *first, int *last) -{ - int x, y, w, h; - *first = minfirstline; - *last = maxvpos_display; - get_custom_raw_limits(&w, &h, &x, &y); - if (y > 0) - *first += y; - //write_log(_T("y=%d h=%d mfl=%d maxvpos=%d\n"), y, h, minfirstline, maxvpos_display); -} - -static int vsyncnextscanline; -static int vsyncnextscanline_add; -static int nextwaitvpos; -static int display_slice_cnt; -static int display_slice_lines; -static int display_slices; -static bool display_rendered; -static int vsyncnextstep; - -static bool linesync_beam_single_dual(void) -{ - bool was_syncline = is_syncline != 0; - frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; - int vp; - - if (is_last_line()) { - do_render_slice(-1, 0, vpos); - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - vp = target_get_display_scanline(-1); - if (vp >= 0) - break; - } - vsyncmintime = read_processor_time() + vsynctimebase; - vsync_clear(); - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight - 1 || vp < 0) - break; - scanlinesleep(vp, vsync_activeheight - 1); - } - frame_rendered = true; - frame_shown = true; - do_display_slice(); - int vv = (int)vsync_vblank; - while (vv >= 85) { - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - vp = target_get_display_scanline(-1); - if (vp < vsync_activeheight / 2) - break; - } - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight / 2) - break; - } - show_screen(0, 3); - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight - 1 || vp < vsync_activeheight / 2) - break; - } - show_screen(0, 2); - vv -= currprefs.ntscmode ? 60 : 50; - } - return true; - } - return false; -} - -static bool linesync_beam_single_single(void) -{ - bool was_syncline = is_syncline != 0; - frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; - int vp; - - if (is_last_line()) { - if (vsyncnextstep != 1) { - vsyncnextstep = 1; - do_render_slice(-1, 0, vpos); - // wait until out of vblank - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - vp = target_get_display_scanline(-1); - if (vp >= 0 && vp < vsync_activeheight / 2) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -3; - return 0; - } - target_spin(0); - } - } - if (vsyncnextstep != 2) { - vsyncnextstep = 2; - vsync_clear(); - // wait until second half of display - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight / 2) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -2; - is_syncline_end = vsync_activeheight - 1; - return 0; - } - scanlinesleep(vp, vsync_activeheight / 2); - } - } - if (vsyncnextstep != 3) { - vsyncnextstep = 3; - // wait until end of display (or start of next field) - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight - 1 || vp < vsync_activeheight / 2) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -2; - is_syncline_end = vsync_activeheight - 1; - return 0; - } - scanlinesleep(vp, vsync_activeheight - 1); - } - } - if (vsyncnextstep != 4) { - vsyncnextstep = 4; - do_display_slice(); - frame_rendered = true; - frame_shown = true; - // wait until first half of display - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - vp = target_get_display_scanline(-1); - if (vp < vsync_activeheight / 2) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -(100 + vsync_activeheight / 2); - return 0; - } - target_spin(0); - } - } - return true; - } - return false; -} - -static bool linesync_beam_multi_dual(void) -{ - frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; - bool input_read_done = false; - bool was_syncline = is_syncline != 0; - - events_reset_syncline(); - if (vpos == 0 && !was_syncline) { - int firstline, lastline; - linesync_first_last_line(&firstline, &lastline); - - display_slices = currprefs.gfx_display_sections; - if (display_slices <= 0) - display_slices = 1; - display_slice_cnt = 0; - vsyncnextscanline = vsync_activeheight / display_slices + 1; - vsyncnextscanline_add = vsync_activeheight / display_slices; - display_slice_lines = (lastline - firstline) / display_slices + 1; - nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; - if (display_slices <= 1) - nextwaitvpos = lastline + 1; - if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) - vsyncnextscanline = vsync_activeheight * 2 / 3; - - display_rendered = false; - frame_rendered = true; - frame_shown = true; - } - - if (!display_slices) - return false; - - if (vpos >= nextwaitvpos || is_last_line()) { - - if (display_slice_cnt == 0) { - - if (!was_syncline) { - do_render_slice(is_last_line() ? 1 : 2, display_slice_cnt, vpos); - display_rendered = true; - } - - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - int vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight - 1 || vp < 0) - break; - } - - do_display_slice(); - display_rendered = false; - input_read_done = true; - - } else { - - if (!currprefs.turbo_emulation) { - if (!was_syncline && !display_rendered) { - do_render_slice(0, display_slice_cnt, vpos - 1); - display_rendered = true; - } - while(sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - if (vp == -1) { - maybe_process_pull_audio(); - target_spin(0); - continue; - } - if (vp < 0 || vp >= vsyncnextscanline) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = vsyncnextscanline; - return 0; - } - maybe_process_pull_audio(); - scanlinesleep(vp, vsyncnextscanline); - } - do_display_slice(); - } - - if (is_last_line()) { - // wait extra frames - int vv = (int)vsync_vblank; - for(;;) { - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - int vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight - 1 || vp < 0) - break; - } - show_screen(0, 3); - show_screen(0, 2); - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - int vp = target_get_display_scanline(-1); - if (vp >= vsync_activeheight / 2) - break; - } - vv -= currprefs.ntscmode ? 60 : 50; - if (vv < 85) - break; - - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - maybe_process_pull_audio(); - target_spin(0); - int vp = target_get_display_scanline(-1); - if (vp < vsync_activeheight / 2 && vp >= 0) - break; - } - } - - } - - input_read_done = true; - display_rendered = false; - - vsyncnextscanline += vsync_activeheight / display_slices; - vsync_clear(); - } - - nextwaitvpos += display_slice_lines; - display_slice_cnt++; - - - } - return input_read_done; -} - -static bool linesync_beam_multi_single(void) -{ - frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; - bool input_read_done = false; - bool was_syncline = is_syncline != 0; - - events_reset_syncline(); - if (vpos == 0 && !was_syncline) { - int firstline, lastline; - linesync_first_last_line(&firstline, &lastline); - - display_slices = currprefs.gfx_display_sections; - if (!display_slices) - display_slices = 1; - display_slice_cnt = 0; - vsyncnextscanline = vsync_activeheight / display_slices + 1; - vsyncnextscanline_add = vsync_activeheight / display_slices; - display_slice_lines = (lastline - firstline) / display_slices + 1; - nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; - if (display_slices <= 1) - nextwaitvpos = lastline + 1; - if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) - vsyncnextscanline = vsync_activeheight * 2 / 3; - - display_rendered = false; - frame_rendered = true; - frame_shown = true; - } - - if (!display_slices) - return false; - - if (is_last_line()) { - - if (!was_syncline && !display_rendered) { - do_render_slice(1, display_slice_cnt, vpos); - display_rendered = true; - } - // if 2 slices: make sure we are out of vblank. - if (display_slices <= 2) { - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - if (vp != -1) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -3; - return 0; - } - target_spin(0); - } - vsync_clear(); - } - - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - if (vp < 0 || vp >= vsyncnextscanline) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = vsyncnextscanline; - return 0; - } - scanlinesleep(vp, vsyncnextscanline); -#if LLV_DEBUG - write_log(_T("1:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - } - do_display_slice(); - input_read_done = true; - display_slice_cnt = -1; - display_rendered = false; -#if LLV_DEBUG - write_log("\n"); -#endif - - } else if (vpos >= nextwaitvpos) { - - // topmost/first slice? - if (display_slice_cnt == 0) { - - if (!currprefs.turbo_emulation) { - if (!was_syncline) { - do_render_slice(2, display_slice_cnt, vpos - 1); - display_rendered = true; - } - - // flip slightly early because flip regularly gets delayed if done during vblank - int lastflipline = vsync_activeheight - vsyncnextscanline_add / 5; - while (sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - maybe_process_pull_audio(); - if (vp < vsync_activeheight / 2 || vp >= lastflipline) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline_end = lastflipline; - is_syncline = -2; - return 0; - } - target_spin(0); -#if LLV_DEBUG - write_log(_T("2:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - } - do_display_slice(); - display_rendered = false; - input_read_done = true; - -#if 1 - // if flipped before vblank, wait for vblank - while (sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - if (vp < vsync_activeheight / 2) - break; - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -1; - is_syncline_end = vp; - return 0; - } - maybe_process_pull_audio(); - target_spin(0); - } -#endif - } - + SW(v); /* 058 BLTSIZE */ + SW(blt_info.bltcon0 & 0xff);/* 05A BLTCON0L (use BLTCON0 instead) */ + SW(blt_info.vblitsize); /* 05C BLTSIZV */ + SW(blt_info.hblitsize); /* 05E BLTSIZH */ + SW(blt_info.bltcmod); /* 060 BLTCMOD */ + SW(blt_info.bltbmod); /* 062 BLTBMOD */ + SW(blt_info.bltamod); /* 064 BLTAMOD */ + SW(blt_info.bltdmod); /* 066 BLTDMOD */ + SW(0); /* 068 ? */ + SW(0); /* 06A ? */ + SW(0); /* 06C ? */ + SW(0); /* 06E ? */ + SW(blt_info.bltcdat); /* 070 BLTCDAT */ + SW(blt_info.bltbdat); /* 072 BLTBDAT */ + SW(blt_info.bltadat); /* 074 BLTADAT */ + SW(0); /* 076 ? */ + SW(0); /* 078 ? */ + SW(0); /* 07A ? */ + SW(DENISEID(&dummy)); /* 07C DENISEID/LISAID */ + SW(dsksync); /* 07E DSKSYNC */ + SL(cop1lc); /* 080-083 COP1LC */ + SL(cop2lc); /* 084-087 COP2LC */ + SW(0); /* 088 ? */ + SW(0); /* 08A ? */ + SW(0); /* 08C ? */ + SW(diwstrt); /* 08E DIWSTRT */ + SW(diwstop); /* 090 DIWSTOP */ + SW(ddfstrt); /* 092 DDFSTRT */ + SW(ddfstop); /* 094 DDFSTOP */ + SW(dmacon); /* 096 DMACON */ + SW(clxcon); /* 098 CLXCON */ + SW(intena); /* 09A INTENA */ + SW(intreq); /* 09C INTREQ */ + SW(adkcon); /* 09E ADKCON */ + for (i = 0; full && i < 32; i++) + SW(0); + for (i = 0; i < 8; i++) + SL(bplpt[i]); /* 0E0-0FE BPLxPT */ + SW(bplcon0); /* 100 BPLCON0 */ + SW(bplcon1); /* 102 BPLCON1 */ + SW(bplcon2); /* 104 BPLCON2 */ + SW(bplcon3); /* 106 BPLCON3 */ + SW(bpl1mod); /* 108 BPL1MOD */ + SW(bpl2mod); /* 10A BPL2MOD */ + SW(bplcon4); /* 10C BPLCON4 */ + SW(clxcon2); /* 10E CLXCON2 */ + for (i = 0; i < 8; i++) { + SW(save_custom_bpl_dat(i)); /* 110 BPLxDAT */ + } + if (full) { + for (i = 0; i < 8; i++) { + SL (spr[i].pt); /* 120-13E SPRxPT */ + } + for (i = 0; i < 8; i++) { + struct sprite *s = &spr[i]; + SW(s->pos); /* 1x0 SPRxPOS */ + SW(s->ctl); /* 1x2 SPRxPOS */ + SW(0); + SW(0); + } + } + for (i = 0; i < 32; i++) { + if (aga_mode) { + uae_u32 v = denise_colors.color_regs_aga[i]; + uae_u16 v2; + v &= 0x00f0f0f0; + v2 = (v >> 4) & 15; + v2 |= ((v >> 12) & 15) << 4; + v2 |= ((v >> 20) & 15) << 8; + SW(v2); } else { - - // skip if too close - int vp2 = target_get_display_scanline(-1); - if (!currprefs.turbo_emulation && (currprefs.m68k_speed < 0 || vp2 < vsyncnextscanline - vsyncnextscanline_add / 10)) { - if (!was_syncline && !display_rendered) { - do_render_slice(0, display_slice_cnt, vpos - 1); - display_rendered = true; - } - while (sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - // We are still in vblank and second slice? Poll until vblank ends. - if (display_slice_cnt == 1 && vp == -1) { - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -3; - return 0; - } - - target_spin(0); -#if LLV_DEBUG - write_log(_T("3:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - continue; - } - if (vp < 0 || vp >= vsyncnextscanline) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = vsyncnextscanline; - return 0; - } - scanlinesleep(vp, vsyncnextscanline); -#if LLV_DEBUG - write_log(_T("4:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - } - do_display_slice(); - input_read_done = true; - display_rendered = false; - } - vsyncnextscanline += vsyncnextscanline_add; - vsync_clear(); + uae_u16 v = denise_colors.color_regs_ecs[i]; + if (denise_colors.color_regs_genlock[i]) + v |= 0x8000; + SW(v); /* 180-1BE COLORxx */ } - nextwaitvpos += display_slice_lines; - display_slice_cnt++; -#if LLV_DEBUG - write_log("\n"); -#endif } + SW(htotal); /* 1C0 HTOTAL */ + SW(hsstop); /* 1C2 HSTOP*/ + SW(hbstrt); /* 1C4 HBSTRT */ + SW(hbstop); /* 1C6 HBSTOP */ + SW(vtotal); /* 1C8 VTOTAL */ + SW(vsstop); /* 1CA VSSTOP */ + SW(vbstrt); /* 1CC VBSTRT */ + SW(vbstop); /* 1CE VBSTOP */ + SW(sprhstrt); /* 1D0 SPRHSTRT */ + SW(sprhstop); /* 1D2 SPRHSTOP */ + SW(bplhstrt); /* 1D4 BPLHSTRT */ + SW(bplhstop); /* 1D6 BPLHSTOP */ + SW(hhpos); /* 1D8 HHPOSW */ + SW(HHPOSR()); /* 1DA HHPOSR */ + SW(new_beamcon0); /* 1DC BEAMCON0 */ + SW(hsstrt); /* 1DE HSSTRT */ + SW(vsstrt); /* 1E0 VSSTRT */ + SW(hcenter); /* 1E2 HCENTER */ + SW(diwhigh | (diwhigh_written ? 0x8000 : 0) | (hdiwstate == diw_states::DIW_waiting_stop ? 0x4000 : 0) | (vdiwstate == diw_states::DIW_waiting_start ? 0x0080 : 0)); /* 1E4 DIWHIGH */ + SW(bplhmod); /* 1E6 */ + SW(hhspr >> 16); /* 1E8 */ + SW(hhspr & 0xffff); /* 1EA */ + SW(hhbpl >> 16); /* 1E8 */ + SW(hhbpl & 0xffff); /* 1EA */ + SW(0); /* 1F0 */ + SW(0); /* 1F2 */ + SW(0); /* 1F4 */ + SW(0); /* 1F6 */ + SW(0); /* 1F8 */ + SW(0x8000 | (currprefs.ntscmode ? 1 : 0)); /* 1FA (re-used for NTSC) */ + SW(fmode); /* 1FC FMODE */ + SW(last_custom_value); /* 1FE */ + SL(refptr); - return input_read_done; + *len = dst - dstbak; + return dstbak; } -static bool linesync_beam_vrr(void) -{ - frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase; - bool input_read_done = false; - bool was_syncline = is_syncline != 0; - - events_reset_syncline(); - if (vpos == 0 && !was_syncline) { - int firstline, lastline; - linesync_first_last_line(&firstline, &lastline); - - display_slices = currprefs.gfx_display_sections; - if (!display_slices) - display_slices = 1; - display_slice_cnt = 0; - vsyncnextscanline = vsync_activeheight / display_slices + 1; - vsyncnextscanline_add = vsync_activeheight / display_slices; - display_slice_lines = (lastline - firstline) / display_slices + 1; - nextwaitvpos = firstline + display_slice_lines + display_slice_lines / 2; - if (display_slices <= 1) - nextwaitvpos = lastline + 1; - if (display_slices <= 2 && vsyncnextscanline > vsync_activeheight * 2 / 3) - vsyncnextscanline = vsync_activeheight * 2 / 3; - - display_rendered = false; - frame_rendered = true; - frame_shown = true; - } - - if (!display_slices) - return false; +#endif /* SAVESTATE || DEBUGGER */ - if (is_last_line()) { +#ifdef SAVESTATE - if (!was_syncline && !display_rendered) { - do_render_slice(1, display_slice_cnt, vpos); - display_rendered = true; - } +uae_u8 *restore_custom_agacolors(uae_u8 *src) +{ + int i; - while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - if (vp < 0 || vp >= vsyncnextscanline) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = vsyncnextscanline; - return 0; - } - scanlinesleep(vp, vsyncnextscanline); -#if LLV_DEBUG - write_log(_T("1:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif + for (i = 0; i < 256; i++) { +#ifdef AGA + uae_u32 v = RL; + denise_colors.color_regs_genlock[i] = 0; + if (v & 0x80000000) { + denise_colors.color_regs_genlock[i] = 1; } - do_display_slice(); - input_read_done = true; - display_slice_cnt = -1; - display_rendered = false; -#if LLV_DEBUG - write_log("\n"); -#endif - - } else if (vpos >= nextwaitvpos) { - - // topmost/first slice? - if (display_slice_cnt == 0) { - - if (!currprefs.turbo_emulation) { - - frame_time_t rpt; - for (;;) { - rpt = read_processor_time(); - if (rpt - (vsyncmintime - vsynctimebase * 2 / 3) >= 0 || rpt - vsyncmintime < -2 * vsynctimebase) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -1; - is_syncline_end = target_get_display_scanline(-1); - return 0; - } - target_spin(0); - } - - if (!was_syncline) { - do_render_slice(2, display_slice_cnt, vpos - 1); - display_rendered = true; - } - - for (;;) { - rpt = read_processor_time(); - if (rpt - vsyncmintime >= 0 || rpt - vsyncmintime < -2 * vsynctimebase) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = -1; - is_syncline_end = target_get_display_scanline(-1); - return 0; - } - target_spin(0); - } - - if (rpt - vsyncmintime < vsynctimebase && rpt - vsyncmintime > -vsynctimebase) { - vsyncmintime += vsynctimebase; - } else { - vsyncmintime = rpt + vsynctimebase; - } - do_display_slice(); - display_rendered = false; - input_read_done = true; - } - - } else { - - if (!currprefs.turbo_emulation) { - if (!was_syncline && !display_rendered) { - do_render_slice(0, display_slice_cnt, vpos - 1); - display_rendered = true; - } - while (sync_timeout_check(maxtime)) { - int vp = target_get_display_scanline(-1); - // We are still in vblank and second slice? Poll until vblank ends. - if (display_slice_cnt == 1 && vp == -1) { - maybe_process_pull_audio(); - target_spin(0); -#if LLV_DEBUG - write_log(_T("3:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - continue; - } - if (vp < 0 || vp >= vsyncnextscanline) - break; - maybe_process_pull_audio(); - if (currprefs.m68k_speed < 0 && !was_syncline) { - is_syncline = vsyncnextscanline; - return 0; - } - scanlinesleep(vp, vsyncnextscanline); -#if LLV_DEBUG - write_log(_T("4:%d:%d:%d:%d."), vpos, vp, nextwaitvpos, vsyncnextscanline); -#endif - } - do_display_slice(); - input_read_done = true; - display_rendered = false; - } - vsyncnextscanline += vsyncnextscanline_add; - vsync_clear(); + v &= 0xffffff; + denise_colors.color_regs_aga[i] = v; + if (i < 32) { + saved_color_regs_aga[i] = v; } - nextwaitvpos += display_slice_lines; - display_slice_cnt++; -#if LLV_DEBUG - write_log("\n"); +#else + RL; #endif } - - return input_read_done; + docols(&denise_colors); + return src; } -// called when extra CPU wait is done -void vsync_event_done(void) +uae_u8 *save_custom_agacolors(size_t *len, uae_u8 *dstptr) { - if (!isvsync_chipset()) { - events_reset_syncline(); - return; - } - if (currprefs.gfx_display_sections <= 1) { - if (vsync_vblank >= 85) - linesync_beam_single_dual(); - else - linesync_beam_single_single(); - } else { - if (currprefs.gfx_variable_sync) - linesync_beam_vrr(); - else if (vsync_vblank >= 85) - linesync_beam_multi_dual(); - else - linesync_beam_multi_single(); + uae_u8 *dstbak, *dst; + + if (!aga_mode) { + int i; + for (i = 0; i < 256; i++) { + if (denise_colors.color_regs_aga[i] || denise_colors.color_regs_genlock[i]) + break; + } + if (i == 256) + return NULL; } + + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc (uae_u8, 256 * 4); + for (int i = 0; i < 256; i++) +#ifdef AGA + SL ((denise_colors.color_regs_aga[i] & 0xffffff) | (denise_colors.color_regs_genlock[i] ? 0x80000000 : 0)); +#else + SL (0); +#endif + *len = dst - dstbak; + return dstbak; } -static void check_vblank_copjmp(uae_u32 v) +uae_u8 *restore_custom_sprite(int num, uae_u8 *src) { - COPJMP(1, 1); + struct sprite *s = &spr[num]; + memset (s, 0, sizeof (struct sprite)); + s->pt = RL; /* 120-13E SPRxPT */ + s->pos = RW; /* 1x0 SPRxPOS */ + s->ctl = RW; /* 1x2 SPRxPOS */ + return restore_custom_sprite_denise(num, src, s->pos, s->ctl); } -static void delayed_framestart(uae_u32 v) +uae_u8 *save_custom_sprite(int num, size_t *len, uae_u8 *dstptr) { - check_vblank_copjmp(0); - INTREQ_INT(5, 0); // total REFRESH_FIRST_HPOS - 1 + 1 (in INTREQ_INT) + uae_u8 *dstbak, *dst; + struct sprite *s = &spr[num]; + + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 30); + SL(s->pt); /* 120-13E SPRxPT */ + SW(s->pos); /* 1x0 SPRxPOS */ + SW(s->ctl); /* 1x2 SPRxPOS */ + dst = save_custom_sprite_denise(num, dst); + *len = dst - dstbak; + return dstbak; } -// this prepares for new line -static void hsync_handler_post(bool onvsync) +uae_u8 *restore_custom_extra(uae_u8 *src) { - // genlock active: - // vertical: interlaced = toggles every other field, non-interlaced = both fields (normal) - // horizontal: PAL = every line, NTSC = every other line - genlockhtoggle = !genlockhtoggle; - bool ciahsyncs = !(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock && (!currprefs.ntscmode || genlockhtoggle)); - bool ciavsyncs = !(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock && genlockvtoggle); + uae_u32 v = restore_u32(); + uae_u8 tmp = 0; - CIA_hsync_posthandler(false, false); - if (currprefs.cs_cd32cd) { - CIA_hsync_posthandler(true, true); - CIAB_tod_handler(35); - } else if (ciahsyncs) { - CIA_hsync_posthandler(true, ciahsyncs); - if (beamcon0 & BEAMCON0_VARHSYEN) { - if (hsstop < (maxhpos & ~1) && hsstrt < maxhpos) { - CIAB_tod_handler(hsstop); - } - } else { - CIAB_tod_handler(35); // hsync end - } - } + if (!(v & 1)) + v = 0; + currprefs.cs_compatible = changed_prefs.cs_compatible = v >> 24; + cia_set_overlay((v & 2) != 0); - if (currprefs.cs_cd32cd) { + currprefs.genlock = changed_prefs.genlock = RBB; + currprefs.cs_rtc = changed_prefs.cs_rtc = RB; + RL; // currprefs.cs_rtc_adjust = changed_prefs.cs_rtc_adjust = RL; - if (cia_hsync < maxhpos) { - CIAA_tod_handler(cia_hsync); - cia_hsync += (akiko_ntscmode() ? 262 : 313) * maxhpos; - } else { - cia_hsync -= maxhpos; - } + currprefs.cs_a1000ram = changed_prefs.cs_a1000ram = RBB; - } else if (currprefs.cs_ciaatod > 0) { -#if 0 - static uae_s32 oldtick; - uae_s32 tick = read_system_time (); // milliseconds - int ms = 1000 / (currprefs.cs_ciaatod == 2 ? 60 : 50); - if (tick - oldtick > 2000 || tick - oldtick < -2000) { - oldtick = tick - ms; - write_log (_T("RESET\n")); - } - if (tick - oldtick >= ms) { - CIA_vsync_posthandler (1); - oldtick += ms; - } -#else - if (cia_hsync < maxhpos) { - int newcount; - CIAA_tod_handler(cia_hsync); - newcount = (int)((vblank_hz * (2 * maxvpos + (interlace_seen ? 1 : 0)) * (2 * maxhpos + (linetoggle ? 1 : 0))) / ((currprefs.cs_ciaatod == 2 ? 60 : 50) * 4)); - cia_hsync += newcount; - } else { - cia_hsync -= maxhpos; - } -#endif - } else if (currprefs.cs_ciaatod == 0 && ciavsyncs) { - // CIA-A TOD counter increases when vsync pulse ends - if (beamcon0 & BEAMCON0_VARVSYEN) { - if (vsstop == vpos) { - // Always uses HCENTER and HSSTRT registers. Even if VARHSYEN=0. - CIAA_tod_handler(lof_store ? hcenter : hsstrt); - } - } else { - if (vpos == (currprefs.ntscmode ? VSYNC_ENDLINE_NTSC : VSYNC_ENDLINE_PAL)) { - CIAA_tod_handler(lof_store ? 132 : 18); - } - } - } + //currprefs.a2091rom.enabled = changed_prefs.a2091rom.enabled = RBB; + //currprefs.a4091rom.enabled = changed_prefs.a4091rom.enabled = RBB; + tmp = RBB; + tmp = RBB; + tmp = RBB; - if (!custom_disabled) { - if (!currprefs.blitter_cycle_exact && blt_info.blit_main && dmaen (DMA_BITPLANE) && vdiwstate == diw_states::DIW_waiting_stop) { - blitter_slowdown(thisline_decision.plfleft, thisline_decision.plfright - (16 << fetchmode), - cycle_diagram_total_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)], - cycle_diagram_free_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)]); - } - } + currprefs.cs_pcmcia = changed_prefs.cs_pcmcia = RBB; + currprefs.cs_ciaatod = changed_prefs.cs_ciaatod = RB; + currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay = RBB; - if (onvsync) { - // vpos_count >= MAXVPOS just to not crash if VPOSW writes prevent vsync completely - vpos = 0; - vsync_handler_post(); - vpos_count = 0; - } + tmp = RBB; + tmp = RBB; - // vblank interrupt = next line after VBSTRT - if (vpos == 0 && vb_start_line == 1) { - // first refresh (strobe) slot triggers vblank interrupt - // copper and vblank trigger in same line - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, delayed_framestart); - } else if (vb_start_line == 1) { - INTREQ_INT(5, REFRESH_FIRST_HPOS - 1); - } else if (vpos == 0) { - event2_newevent_xx(-1, 2 * CYCLE_UNIT, 0, check_vblank_copjmp); - } + currprefs.cs_agnusrev = changed_prefs.cs_agnusrev = SRB; + currprefs.cs_deniserev = changed_prefs.cs_deniserev = SRB; + currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev = SRB; + currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev = SRB; - // lastline - 1? - if (vpos + 1 == maxvpos + lof_store || vpos + 1 == maxvpos + lof_store + 1) { - lof_lastline = lof_store != 0; - } + currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p = RBB; + currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = RBB; + currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram = RBB; + currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd = RBB; + currprefs.cs_cdtvram = changed_prefs.cs_cdtvram = RBB; + RB; - if (vb_end_next_line2) { - vb_end_next_line2 = false; - } - if (vb_end_next_line) { - vb_end_next_line2 = true; - vb_end_next_line = false; - } - if (vb_start_line) { - vb_start_line++; - } - if (vb_end_line) { - vb_start_line = 0; - vb_end_line = false; - vb_end_next_line = true; - } + currprefs.cs_df0idhw = changed_prefs.cs_df0idhw = RBB; + tmp = RBB; + currprefs.cs_ide = changed_prefs.cs_ide = RB; + currprefs.cs_mbdmac = changed_prefs.cs_mbdmac = RB; + currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8 = RBB; + currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0 = RBB; + currprefs.cs_resetwarning = changed_prefs.cs_resetwarning = RBB; + currprefs.cs_z3autoconfig = changed_prefs.cs_z3autoconfig = RBB; + currprefs.cs_1mchipjumper = changed_prefs.cs_1mchipjumper = RBB; + currprefs.cs_bytecustomwritebug = changed_prefs.cs_bytecustomwritebug = RBB; + currprefs.cs_color_burst = changed_prefs.cs_color_burst = RBB; + currprefs.cs_toshibagary = changed_prefs.cs_toshibagary = RBB; + currprefs.cs_romisslow = changed_prefs.cs_romisslow = RBB; + + currprefs.cs_ciatype[0] = changed_prefs.cs_ciatype[0] = RBB; + currprefs.cs_ciatype[1] = changed_prefs.cs_ciatype[1] = RBB; + + currprefs.cs_memorypatternfill = changed_prefs.cs_memorypatternfill = RBB; + + currprefs.cs_agnusmodel = changed_prefs.cs_agnusmodel = RBB; + currprefs.cs_agnussize = changed_prefs.cs_agnussize = RBB; + currprefs.cs_denisemodel = changed_prefs.cs_denisemodel = RBB; + + return src; +} + +uae_u8 *save_custom_extra(size_t *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; + + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 1000); + + SL((currprefs.cs_compatible << 24) | (get_mem_bank_real(0) != &chipmem_bank ? 2 : 0) | 1); + SB(currprefs.genlock ? 1 : 0); + SB(currprefs.cs_rtc); + SL(currprefs.cs_rtc_adjust); + + SB(currprefs.cs_a1000ram ? 1 : 0); + + SB(is_board_enabled(&currprefs, ROMTYPE_A2091, 0) ? 1 : 0); + SB(is_board_enabled(&currprefs, ROMTYPE_A4091, 0) ? 1 : 0); + SB(0); + + SB(currprefs.cs_pcmcia ? 1 : 0); + SB(currprefs.cs_ciaatod); + SB(currprefs.cs_ciaoverlay ? 1 : 0); + + SB(agnusa1000 ? 1 : 0); + SB(denisea1000_noehb ? 1 : 0); + + SB(currprefs.cs_agnusrev); + SB(currprefs.cs_deniserev); + SB(currprefs.cs_fatgaryrev); + SB(currprefs.cs_ramseyrev); + + SB(currprefs.cs_cd32c2p); + SB(currprefs.cs_cd32cd); + SB(currprefs.cs_cd32nvram); + SB(currprefs.cs_cdtvcd ? 1 : 0); + SB(currprefs.cs_cdtvram ? 1 : 0); + SB(0); + + SB(currprefs.cs_df0idhw ? 1 : 0); + SB(agnusa1000 ? 1 : 0); + SB(currprefs.cs_ide); + SB(currprefs.cs_mbdmac); + SB(currprefs.cs_ksmirror_a8 ? 1 : 0); + SB(currprefs.cs_ksmirror_e0 ? 1 : 0); + SB(currprefs.cs_resetwarning ? 1 : 0); + SB(currprefs.cs_z3autoconfig ? 1 : 0); + SB(currprefs.cs_1mchipjumper ? 1 : 0); + + SB(currprefs.cs_bytecustomwritebug ? 1 : 0); + SB(currprefs.cs_color_burst ? 1 : 0); + SB(currprefs.cs_toshibagary ? 1 : 0); + SB(currprefs.cs_romisslow ? 1 : 0); + + SB(currprefs.cs_ciatype[0]); + SB(currprefs.cs_ciatype[1]); - vs_state_var_old = vs_state_var; - if (ecs_agnus) { - if (vsstrt_m == vpos) { - vsstrt_m = -1; - } - if (vsstop_m == vpos) { - vsstop_m = -1; - } + SB(currprefs.cs_memorypatternfill); - if (vbstrt_m == vpos) { - vbstrt_m = -1; - } - if (vbstop_m == vpos) { - vbstop_m = -1; - } + SB(currprefs.cs_agnusmodel); + SB(currprefs.cs_agnussize); + SB(currprefs.cs_denisemodel); - if (vsstrt == vpos) { - vsstrt_m = vpos; - vs_state_var = true; - } - if (vsstop == vpos) { - vsstop_m = vpos; - vs_state_var = false; - } + *len = dst - dstbak; + return dstbak; +} - if (new_beamcon0 & BEAMCON0_VARVBEN) { - if (vbstrt == vpos) { - vbstrt_m = vpos; - vb_start_line = 1; - vb_state = true; - } - int vbs = vbstop - 1; - if (vbs < 0) { - vbs += maxvpos; - } - if (vbs == vpos) { - vbstop_m = vpos; - vb_end_line = true; - vb_state = false; - if (vbstrt == vpos) { - vb_start_line = 0; - } - } - } +static int getregfrompt(uaecptr *pt) +{ + if (pt == &blt_info.bltdpt) + return 0x000; + if (pt == &blt_info.bltcpt) + return 0x070; + if (pt == &blt_info.bltbpt) + return 0x072; + if (pt == &blt_info.bltapt) + return 0x074; + if (pt == &bplpt[0]) + return 0x110; + if (pt == &bplpt[1]) + return 0x112; + if (pt == &bplpt[2]) + return 0x114; + if (pt == &bplpt[3]) + return 0x116; + if (pt == &bplpt[4]) + return 0x118; + if (pt == &bplpt[5]) + return 0x11a; + if (pt == &bplpt[6]) + return 0x11c; + if (pt == &bplpt[7]) + return 0x11e; + if (pt == &spr[0].pt) + return 0x140; + if (pt == &spr[1].pt) + return 0x142; + if (pt == &spr[2].pt) + return 0x144; + if (pt == &spr[3].pt) + return 0x146; + if (pt == &spr[4].pt) + return 0x148; + if (pt == &spr[5].pt) + return 0x14a; + if (pt == &spr[6].pt) + return 0x14c; + if (pt == &spr[7].pt) + return 0x14e; + if (pt == &cop_state.ip) + return 0x8c; + return -1; +} +static uaecptr *getptfromreg(int reg) +{ + switch (reg) + { + case 0x000: + return &blt_info.bltdpt; + case 0x070: + return &blt_info.bltcpt; + case 0x072: + return &blt_info.bltbpt; + case 0x074: + return &blt_info.bltapt; + case 0x110: + return &bplpt[0]; + case 0x112: + return &bplpt[1]; + case 0x114: + return &bplpt[2]; + case 0x116: + return &bplpt[3]; + case 0x118: + return &bplpt[4]; + case 0x11a: + return &bplpt[5]; + case 0x11c: + return &bplpt[6]; + case 0x11e: + return &bplpt[7]; + case 0x140: + return &spr[0].pt; + case 0x142: + return &spr[1].pt; + case 0x144: + return &spr[2].pt; + case 0x146: + return &spr[3].pt; + case 0x148: + return &spr[4].pt; + case 0x14a: + return &spr[5].pt; + case 0x14c: + return &spr[6].pt; + case 0x14e: + return &spr[7].pt; + case 0x8c: + return &cop_state.ip; + } + return &dummyrgaaddr; +} - if (vpos == sprhstrt_v) { - hhspr = 1; - } - if (vpos == sprhstop_v) { - hhspr = 0; - } - if (vpos == bplhstrt_v) { - hhbpl = 1; - } - if (vpos == bplhstop_v) { - hhbpl = 0; - } - uae_u16 add = maxhpos - 1; - uae_u16 max = (new_beamcon0 & BEAMCON0_DUAL) ? htotal : add; - uae_u16 hhpos_old = hhpos; - hhpos += add; - if (hhpos_old <= max || hhpos >= 0x100) { - if (max) - hhpos %= max; - else - hhpos = 0; - } - if (hhpos_hpos) { - hhpos -= add - hhpos_hpos; - hhpos_hpos = 0; - } - hhpos &= 0xff; - } - if (beamcon0 & BEAMCON0_PAL) { - if (vpos == 2 && !lof_store) { - vs_state_hw = true; - } - if (vpos == 3 && lof_store) { - vs_state_hw = true; - } - if (vpos == 5 + 1) { - vs_state_hw = false; - } - } else { - if (vpos == 3) { - vs_state_hw = true; - } - if (vpos == 6 + 1) { - vs_state_hw = false; - } - } +uae_u8 *save_custom_slots(size_t *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; - vs_state_on_old = vs_state_on; - if (new_beamcon0 & bemcon0_vsync_mask) { - vs_state_on = vs_state_var; - } else { - vs_state_on = vs_state_hw; - } + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 1000); - if (!(new_beamcon0 & BEAMCON0_VARVBEN)) { - vb_check(); + uae_u32 v = 1 | 8; + // copper final MOVE pending? + if (cop_state.state == COP_read1) { + v |= 2; + } else if (cop_state.state == COP_read2) { + v |= 4; } + save_u32(v); + save_u32(cop_state.ip); + save_u16(cop_state.ir[0]); + save_u16(cop_state.ir[1]); - exthblank_lines[exthblank ? 1 : 0]++; - - if (varhblank_lines > 0) { - varhblank_lines--; - if (!varhblank_lines) { - if (varhblank_val[0] != hbstrt || varhblank_val[1] != hbstop) { - varhblank_lines = -1; - varhblank_val[0] = hbstrt; - varhblank_val[1] = hbstop; - } - } + for (int i = 0; i < 4; i++) { + save_u16(0);//save_u16(cycle_line_pipe[i]); + save_u16(0);//save_u16(cycle_line_slot[i]); + } + + // RGA pipeline + for (int i = 0; i < RGA_SLOT_TOTAL; i++) { + struct rgabuf *r = &rga_pipe[i]; + int regidx; + save_u32(r->type); + save_u16(r->reg); + save_u32(r->pv); + save_u32(r->alloc); + save_u32(r->write); + save_u32(r->bpldat); + save_u32(r->sprdat); + save_u32(r->bltdat); + save_u32(r->auddat); + save_u32(r->refdat); + save_u32(r->dskdat); + save_u32(r->copdat); + save_u16(r->bplmod); + save_u16(r->bltmod); + regidx = getregfrompt(r->p); + save_u16(regidx); + regidx = getregfrompt(r->conflict); + save_u16(regidx); } - decide_vline(0); + *len = dst - dstbak; + return dstbak; +} + +uae_u8 *restore_custom_slots(uae_u8 *src) +{ + uae_u32 v = restore_u32(); + if (!(v & 1)) + return src; - if (issyncstopped()) { - issyncstopped_count++; - } else { - issyncstopped_count = 0; + cop_state.ip = restore_u32(); + cop_state.ir[0] = restore_u16(); + cop_state.ir[1] = restore_u16(); + cop_state.state = COP_stop; + if (v & 2) { + cop_state.state = COP_read1; + } else if (v & 4) { + cop_state.state = COP_read2; } - - int hp = REFRESH_FIRST_HPOS; - refptr_p = refptr; for (int i = 0; i < 4; i++) { - uae_u16 strobe = get_strobe_reg(i); - if (i == 0) { - if (!hstrobe_conflict) { - if (strobe == 0x38 || (strobe == 0x3a && ecs_denise)) { - // OCS: only STREQU enables vblank. STREQU and STRVBL if ECS Denise. - strobe_vblank = 1; - } else if (strobe == 0x3c) { - // STRHOR disables vblank - strobe_vblank = 0; - } - } + //cycle_line_pipe[i] = restore_u16(); + //cycle_line_slot[i] = (uae_u8)restore_u16(); + restore_u16(); + restore_u16(); + } + + // RGA pipeline + if (v & 8) { + for (int i = 0; i < RGA_SLOT_TOTAL; i++) { + struct rgabuf *r = &rga_pipe[i]; + int regidx; + r->type = restore_u32(); + r->reg = restore_u16(); + r->pv = restore_u32(); + r->alloc = restore_u32(); + r->write = restore_u32(); + r->bpldat = restore_u32(); + r->sprdat = restore_u32(); + r->bltdat = restore_u32(); + r->auddat = restore_u32(); + r->refdat = restore_u32(); + r->dskdat = restore_u32(); + r->copdat = restore_u32(); + r->bplmod = restore_u16(); + r->bltmod = restore_u16(); + regidx = restore_u16(); + r->p = getptfromreg(regidx); + regidx = restore_u16(); + r->conflict = getptfromreg(regidx); } - alloc_cycle(hp, strobe != 0x1fe ? CYCLE_STROBE : CYCLE_REFRESH); - // assume refresh pointer not changed or conflicted -#ifdef DEBUGGER - if (debug_dma) { - record_dma_read(strobe, refptr & refmask, hp, vpos, DMARECORD_REFRESH, i); - record_dma_read_value(0xffff); - } -#endif - refptr += ref_ras_add; - hp += 2; } - refresh_handled_slot = 0; - refptr_preupdated = true; -#ifdef DEBUGGER - if (debug_dma) { - if (vs_state_on) { - record_dma_event(DMA_EVENT_VS, REFRESH_FIRST_HPOS, vpos); - } - if (vb_start_line) { - record_dma_event(DMA_EVENT_VB, REFRESH_FIRST_HPOS, vpos); - } - if (vdiwstate == diw_states::DIW_waiting_stop) { - record_dma_event(DMA_EVENT_VDIW, REFRESH_FIRST_HPOS, vpos); - } - if (lof_store) { - record_dma_event(DMA_EVENT_LOF, REFRESH_FIRST_HPOS + 2, vpos); + return src; +} + +uae_u8 *restore_custom_event_delay(uae_u8 *src) +{ + if (restore_u32() != 1) + return src; + int cnt = restore_u8(); + for (int i = 0; i < cnt; i++) { + uae_u8 type = restore_u8(); + evt_t e = restore_u64(); + uae_u32 data = restore_u32(); + evfunc2 f = NULL; + switch(type) + { + case 1: + f = event_send_interrupt_do_ext; + break; + case 2: + f = event_doint_delay_do_ext; + break; + case 3: + f = event_audxdat_func; + break; + case 4: + f = event_setdsr; + break; + case 5: + f = event_CIA_synced_interrupt; + break; + case 6: + f = event_doint_delay_do_intreq; + break; + case 7: + f = event_doint_delay_do_intena; + break; + case 8: + f = event_CIA_tod_inc_event; + break; + case 9: + f = event_DISK_handler; + break; + case 10: + f = bitplane_dma_change; + break; + case 0: + write_log("ignored event type %d (%08x) restored\n", type, data); + break; + default: + write_log("unknown event type %d (%08x) restored\n", type, data); + break; } - if (lol) { - record_dma_event(DMA_EVENT_LOL, REFRESH_FIRST_HPOS + 2, vpos); + if (f) { + event2_newevent_xx(-1, e, data, f); } } -#endif - - events_dmal_hsync(); -#if 0 - // AF testing stuff - static int cnt = 0; - cnt++; - if (cnt == 500) { - int port_insert_custom (int inputmap_port, int devicetype, DWORD flags, const TCHAR *custom); - //port_insert_custom (0, 2, 0, _T("Left=0xCB Right=0xCD Up=0xC8 Down=0xD0 Fire=0x39 Fire.autorepeat=0xD2")); - port_insert_custom (1, 2, 0, _T("Left=0x1E Right=0x20 Up=0x11 Down=0x1F Fire=0x38")); - } else if (0 && cnt == 1000) { - TCHAR out[256]; - bool port_get_custom (int inputmap_port, TCHAR *out); - port_get_custom (0, out); - port_get_custom (1, out); - } -#endif - bool input_read_done = false; - - if (currprefs.cpu_thread) { - - maybe_process_pull_audio(); - - } else if (isvsync_chipset() < 0) { - - if (currprefs.gfx_display_sections <= 1) { - if (vsync_vblank >= 85) - input_read_done = linesync_beam_single_dual(); - else - input_read_done = linesync_beam_single_single(); - } else { - if (currprefs.gfx_variable_sync) - input_read_done = linesync_beam_vrr(); - else if (vsync_vblank >= 85) - input_read_done = linesync_beam_multi_dual(); - else - input_read_done = linesync_beam_multi_single(); - } - - } else if (!currprefs.cpu_thread && !cpu_sleepmode && currprefs.m68k_speed < 0 && !currprefs.cpu_memory_cycle_exact) { + return src; +} +uae_u8 *save_custom_event_delay(size_t *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; + int cnt = 0, cnt2 = 0; - static int sleeps_remaining; - if (is_last_line ()) { - sleeps_remaining = (165 - currprefs.cpu_idle) / 6; - if (sleeps_remaining < 0) - sleeps_remaining = 0; - /* really last line, just run the cpu emulation until whole vsync time has been used */ - if (regs.stopped && currprefs.cpu_idle) { - // CPU in STOP state: sleep if enough time left. - frame_time_t rpt = read_processor_time(); - while (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase) { - maybe_process_pull_audio(); -// if (!execute_other_cpu(rpt + vsynctimebase / 10)) { - if (cpu_sleep_millis(1) < 0) - break; -// } - rpt = read_processor_time(); - } - } else if (currprefs.m68k_speed_throttle) { - vsyncmintime = read_processor_time(); /* end of CPU emulation time */ - events_reset_syncline(); - maybe_process_pull_audio(); - } else { - vsyncmintime = vsyncmaxtime; /* emulate if still time left */ - is_syncline_end = read_processor_time() + vsynctimebase; /* far enough in future, we never wait that long */ - is_syncline = -12; - maybe_process_pull_audio(); - } - } else { - static int linecounter; - /* end of scanline, run cpu emulation as long as we still have time */ - vsyncmintime += vsynctimeperline; - linecounter++; - events_reset_syncline(); - if (vsync_isdone(NULL) <= 0 && !currprefs.turbo_emulation) { - if (vsyncmaxtime - vsyncmintime > 0) { - if (vsyncwaittime - vsyncmintime > 0) { - frame_time_t rpt = read_processor_time(); - /* Extra time left? Do some extra CPU emulation */ - if (vsyncmintime - rpt > 0) { - if (regs.stopped && currprefs.cpu_idle && sleeps_remaining > 0) { - // STOP STATE: sleep. - cpu_sleep_millis(1); - sleeps_remaining--; - maybe_process_pull_audio(); - } else { - is_syncline = -11; - /* limit extra time */ - is_syncline_end = rpt + vsynctimeperline; - linecounter = 0; - } - } - } - if (!isvsync ()) { - // extra cpu emulation time if previous 10 lines without extra time. - if (!is_syncline && linecounter >= 10 && (!regs.stopped || !currprefs.cpu_idle)) { - is_syncline = -10; - is_syncline_end = read_processor_time() + vsynctimeperline; - linecounter = 0; - } - } - } - } - maybe_process_pull_audio(); + for (int i = ev2_misc; i < ev2_max; i++) { + struct ev2 *e = &eventtab2[i]; + if (e->active) { + cnt++; } + } + if (cnt == 0) + return NULL; - } else if (!currprefs.cpu_thread) { + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 1000); - // the rest - static int nextwaitvpos; - if (vpos == 0) - nextwaitvpos = maxvpos_display * 1 / 4; - if (audio_is_pull() > 0 && !currprefs.turbo_emulation) { - maybe_process_pull_audio(); - frame_time_t rpt = read_processor_time(); - while (audio_pull_buffer() > 1 && (!isvsync() || (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase))) { - cpu_sleep_millis(1); - maybe_process_pull_audio(); - rpt = read_processor_time(); + save_u32(1); + save_u8(cnt); + for (int i = ev2_misc; i < ev2_max; i++) { + struct ev2 *e = &eventtab2[i]; + if (e->active) { + evfunc2 f = e->handler; + uae_u8 type = 0; + if (f == event_send_interrupt_do_ext) { + type = 1; + } else if (f == event_doint_delay_do_ext) { + type = 2; + } else if (f == event_audxdat_func) { + type = 3; + } else if (f == event_setdsr) { + type = 4; + } else if (f == event_CIA_synced_interrupt) { + type = 5; + } else if (f == event_doint_delay_do_intreq) { + type = 6; + } else if (f == event_doint_delay_do_intena) { + type = 7; + } else if (f == event_CIA_tod_inc_event) { + type = 8; + } else if (f == event_DISK_handler) { + type = 9; + } else if (f == bitplane_dma_change) { + type = 10; + } else { + write_log("unknown event2 handler %p\n", e->handler); + e->active = false; + f(e->data); } - } - if (vpos + 1 < maxvpos + lof_store && vpos >= nextwaitvpos && vpos < maxvpos - (maxvpos / 3) && (audio_is_pull() <= 0 || (audio_is_pull() > 0 && audio_pull_buffer()))) { - nextwaitvpos += maxvpos_display * 1 / 3; - vsyncmintime += vsynctimeperline; - if (vsync_isdone(NULL) <= 0 && !currprefs.turbo_emulation) { - frame_time_t rpt = read_processor_time(); - // sleep if more than 2ms "free" time - while (vsync_isdone(NULL) <= 0 && vsyncmintime - (rpt + vsynctimebase / 10) > 0 && vsyncmintime - rpt < vsynctimebase) { - maybe_process_pull_audio(); -// if (!execute_other_cpu(rpt + vsynctimebase / 10)) { - if (cpu_sleep_millis(1) < 0) - break; -// } - rpt = read_processor_time(); - } + if (type) { + cnt2++; } + save_u8(type); + save_u64(e->evtime - get_cycles()); + save_u32(e->data); } } + write_log("%d pending events saved\n", cnt2); - if (!input_read_done) { - inputdevice_hsync(false); - } + *len = dst - dstbak; + return dstbak; +} - reset_decisions_scanline_start(); - rethink_uae_int(); +uae_u8 *save_cycles(size_t *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 1000); + save_u32(1); + save_u32(CYCLE_UNIT); + save_u64(get_cycles()); + save_u32(extra_cycle); + *len = dst - dstbak; + return dstbak; +} - /* See if there's a chance of a copper wait ending this line. */ - compute_spcflag_copper(); +uae_u8 *restore_cycles(uae_u8 *src) +{ + if (restore_u32() != 1) + return src; + restore_u32(); + start_cycles = restore_u64(); + extra_cycle = restore_u32(); + if (extra_cycle >= 2 * CYCLE_UNIT) + extra_cycle = 0; + set_cycles(start_cycles); + clear_events(); + return src; +} - // check reset and process it immediately, don't wait for vsync - if (quit_program == -UAE_RESET || quit_program == -UAE_RESET_KEYBOARD || quit_program == -UAE_RESET_HARD) { - quit_program = -quit_program; - set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); - } +#endif /* SAVESTATE */ +void check_prefs_changed_custom(void) +{ + bool syncchange = false; -#if 0 - /* fastest possible + last line and no vflip wait: render the frame as early as possible */ - if (is_last_line () && isvsync_chipset () <= -2 && !vsync_rendered && currprefs.gfx_apmode[0].gfx_vflip == 0) { - frame_time_t start, end; - start = read_processor_time (); - vsync_rendered = true; - vsync_handle_redraw (lof_store, lof_changed, bplcon0, bplcon3); - if (vblank_hz_state) { - frame_rendered = crender_screen(1, true); + if (!config_changed) + return; + currprefs.gfx_framerate = changed_prefs.gfx_framerate; + if (currprefs.turbo_emulation_limit != changed_prefs.turbo_emulation_limit) { + currprefs.turbo_emulation_limit = changed_prefs.turbo_emulation_limit; + if (changed_prefs.turbo_emulation) { + warpmode(changed_prefs.turbo_emulation); } - end = read_processor_time (); - frameskiptime += end - start; } -#endif - - rtg_vsynccheck (); - -#if 0 - { - static int skip; - if (M68K_GETPC >= 0x0C0D7A2 && M68K_GETPC < 0x00C0D7B2 && vpos == 0xf3) { - if (!skip) - activate_debugger (); - skip = 1; - } - if (vpos != 0xf3) - skip = 0; + if (currprefs.turbo_emulation != changed_prefs.turbo_emulation) + warpmode(changed_prefs.turbo_emulation); + if (inputdevice_config_change_test()) + inputdevice_copyconfig (&changed_prefs, &currprefs); + currprefs.immediate_blits = changed_prefs.immediate_blits; + currprefs.waiting_blits = changed_prefs.waiting_blits; + currprefs.blitter_speed_throttle = changed_prefs.blitter_speed_throttle; + currprefs.collision_level = changed_prefs.collision_level; + currprefs.keyboard_nkro = changed_prefs.keyboard_nkro; + if (currprefs.keyboard_mode != changed_prefs.keyboard_mode) { + currprefs.keyboard_mode = changed_prefs.keyboard_mode; + // send powerup sync + keyboard_connected(true); + } else if (currprefs.keyboard_mode >= 0 && changed_prefs.keyboard_mode < 0) { + currprefs.keyboard_mode = changed_prefs.keyboard_mode; + keyboard_connected(false); } -#endif -#if 0 - if (vpos == 300 && get_cycles() < 312 * 227 * CYCLE_UNIT) - activate_debugger(); -#endif -} + currprefs.cs_ciaatod = changed_prefs.cs_ciaatod; + currprefs.cs_rtc = changed_prefs.cs_rtc; + currprefs.cs_cd32cd = changed_prefs.cs_cd32cd; + currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p; + currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram; + currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd; + currprefs.cs_ide = changed_prefs.cs_ide; + currprefs.cs_pcmcia = changed_prefs.cs_pcmcia; + currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev; + currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev; + currprefs.cs_agnusrev = changed_prefs.cs_agnusrev; + currprefs.cs_deniserev = changed_prefs.cs_deniserev; + currprefs.cs_mbdmac = changed_prefs.cs_mbdmac; + currprefs.cs_df0idhw = changed_prefs.cs_df0idhw; + currprefs.cs_agnussize = changed_prefs.cs_agnussize; + currprefs.cs_z3autoconfig = changed_prefs.cs_z3autoconfig; + currprefs.cs_bytecustomwritebug = changed_prefs.cs_bytecustomwritebug; + currprefs.cs_color_burst = changed_prefs.cs_color_burst; + currprefs.cs_romisslow = changed_prefs.cs_romisslow; + currprefs.cs_toshibagary = changed_prefs.cs_toshibagary; + currprefs.cs_unmapped_space = changed_prefs.cs_unmapped_space; + currprefs.cs_eclockphase = changed_prefs.cs_eclockphase; + currprefs.cs_eclocksync = changed_prefs.cs_eclocksync; + currprefs.cs_ciatype[0] = changed_prefs.cs_ciatype[0]; + currprefs.cs_ciatype[1] = changed_prefs.cs_ciatype[1]; + currprefs.cs_memorypatternfill = changed_prefs.cs_memorypatternfill; -static bool vsync_line; -// executed at start of scanline -static void hsync_handler(void) -{ - bool vs = is_custom_vsync(); - hsync_handler_pre(vs); - if (vs) { - devices_vsync_pre(); - if (savestate_check()) { - uae_reset(0, 0); - return; - } - eventtab[ev_hsynch].evtime = get_cycles() + hsyncstartpos_start_cycles * CYCLE_UNIT; - eventtab[ev_hsynch].active = 1; - events_schedule(); + if (currprefs.chipset_mask != changed_prefs.chipset_mask || + currprefs.picasso96_nocustom != changed_prefs.picasso96_nocustom || + currprefs.ntscmode != changed_prefs.ntscmode || + currprefs.cs_agnusmodel != changed_prefs.cs_agnusmodel || + currprefs.cs_denisemodel != changed_prefs.cs_denisemodel || + currprefs.cs_hvcsync != changed_prefs.cs_hvcsync + ) { + currprefs.picasso96_nocustom = changed_prefs.picasso96_nocustom; + if (currprefs.ntscmode != changed_prefs.ntscmode) { + currprefs.ntscmode = changed_prefs.ntscmode; + new_beamcon0 = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; + } + if ((changed_prefs.chipset_mask & CSMASK_ECS_AGNUS) && !(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { + new_beamcon0 = beamcon0_saved; + } else if (!(changed_prefs.chipset_mask & CSMASK_ECS_AGNUS) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { + beamcon0_saved = beamcon0; + beamcon0 = new_beamcon0 = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; + diwhigh = 0; + diwhigh_written = 0; + bplcon0 &= ~(0x10 | 0x01); + } + if (currprefs.cs_hvcsync != changed_prefs.cs_hvcsync) { + syncchange = true; + nosignal_trigger = false; + nosignal_status = 0; + } + currprefs.chipset_mask = changed_prefs.chipset_mask; + currprefs.cs_agnusmodel = changed_prefs.cs_agnusmodel; + currprefs.cs_denisemodel = changed_prefs.cs_denisemodel; + currprefs.cs_hvcsync = changed_prefs.cs_hvcsync; + init_custom(); + } + if (currprefs.chipset_hr != changed_prefs.chipset_hr) { + currprefs.chipset_hr = changed_prefs.chipset_hr; + init_custom(); } - if (vpos == maxvpos_display_vsync + 1 && !maxvpos_display_vsync_next) { - hsync_record_line_state_last(next_lineno, nextline_how, 0); - inputdevice_read_msg(true); - vsync_display_render(); - vsync_display_rendered = false; - lof_display = lof_store; - hstrobe_conflict = false; - minfirstline_linear = minfirstline; - reset_autoscale(); - display_vsync_counter++; - maxvpos_display_vsync_next = true; - } else if (vpos != maxvpos_display_vsync + 1 && maxvpos_display_vsync_next) { - // protect against weird VPOSW writes causing continuous vblanks - maxvpos_display_vsync_next = false; + cia_set_eclockphase(); + if (syncchange) { + varsync_changed = 2; } - vsync_line = vs; - hsync_handler_post(vs); -} - -// executed at start of hsync -static void hsync_handlerh(void) -{ - if (vsync_line) { - eventtab[ev_hsynch].evtime = get_cycles() + HSYNCTIME; - eventtab[ev_hsynch].active = 1; - events_schedule(); + if (beamcon0 & (BEAMCON0_VARVBEN | BEAMCON0_CSCBEN | BEAMCON0_VARVSYEN | BEAMCON0_VARHSYEN | BEAMCON0_VARCSYEN | BEAMCON0_VARBEAMEN | BEAMCON0_DUAL | BEAMCON0_BLANKEN)) { + programmed_register_accessed = true; + dumpsync(); } - if (vpos == maxvpos_display_vsync) { - vposh = maxvpos_display_vsync; + +#ifdef GFXFILTER + for (int i = 0; i < 2; i++) { + int idx = i == 0 ? 0 : 2; + struct gfx_filterdata *fd = &currprefs.gf[idx]; + struct gfx_filterdata *fdcp = &changed_prefs.gf[idx]; + + fd->gfx_filter_horiz_zoom = fdcp->gfx_filter_horiz_zoom; + fd->gfx_filter_vert_zoom = fdcp->gfx_filter_vert_zoom; + fd->gfx_filter_horiz_offset = fdcp->gfx_filter_horiz_offset; + fd->gfx_filter_vert_offset = fdcp->gfx_filter_vert_offset; + fd->gfx_filter_scanlines = fdcp->gfx_filter_scanlines; + + fd->gfx_filter_left_border = fdcp->gfx_filter_left_border; + fd->gfx_filter_right_border = fdcp->gfx_filter_right_border; + fd->gfx_filter_top_border = fdcp->gfx_filter_top_border; + fd->gfx_filter_bottom_border = fdcp->gfx_filter_bottom_border; } - hsync_handlerh(vsync_line); +#endif } -static void audio_evhandler2(void) + +static void reset_line(void) { - // update copper first - // if copper had written to audio registers - if (copper_enabled_thisline) { - int hpos = current_hpos(); - sync_copper(hpos); - } - audio_evhandler(); } -void init_eventtab(void) +static uae_u16 fetch16(struct rgabuf *r) { - if (!savestate_state) { - clear_events(); + uaecptr p = r->pv; + uae_u16 v; + if (aga_mode) { + // AGA always does 32-bit fetches, this is needed + // to emulate 64 pixel wide sprite side-effects. + uae_u32 vv = chipmem_lget_indirect(p & ~3); + if (p & 2) { + v = (uae_u16)vv; + } else { + v = vv >> 16; + } + } else { + v = chipmem_wget_indirect(p); } - - eventtab[ev_cia].handler = CIA_handler; - eventtab[ev_hsync].handler = hsync_handler; - eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME; - eventtab[ev_hsync].active = 1; - eventtab[ev_hsynch].handler = hsync_handlerh; - eventtab[ev_hsynch].evtime = get_cycles() + HSYNCTIME; - eventtab[ev_hsynch].active = 0; - eventtab[ev_misc].handler = MISC_handler; - eventtab[ev_audio].handler = audio_evhandler2; - - eventtab2[ev2_blitter].handler = blitter_handler; - - events_schedule(); +#ifdef DEBUGGER + if (memwatch_enabled) { + debug_getpeekdma_value(v); + } + if (debug_dma) { + record_dma_read_value(v); + } +#endif + return v; } -void custom_prepare(void) +static uae_u32 fetch32(struct rgabuf *r) { - set_hpos(); - hsync_handler_post(true); + uae_u32 v; + uaecptr p = r->pv; + uaecptr pm = p & ~3; + if (p & 2) { + v = chipmem_lget_indirect(pm) & 0x0000ffff; + v |= v << 16; + } else if (fetchmode_fmode_bpl & 2) { // optimized (fetchmode_fmode & 3) == 2 + v = chipmem_lget_indirect(pm) & 0xffff0000; + v |= v >> 16; + } else { + v = chipmem_lget_indirect(pm); + } +#ifdef DEBUGGER + if (memwatch_enabled) { + debug_getpeekdma_value_long(v, p - pm); + } + if (debug_dma) { + record_dma_read_value_wide(v, false); + } +#endif + return v; } -void custom_cpuchange(void) +static uae_u64 fetch64(struct rgabuf *r) { - // both values needs to be same but also different - // after CPU mode changes - intreq = intreq | 0x8000; - intena = intena | 0x8000; - intreq2 = intreq; - intena2 = intena; + uae_u64 v; + uaecptr p = r->pv; + uaecptr pm = p & ~7; + uaecptr pm1, pm2; + if (p & 4) { + pm1 = pm + 4; + pm2 = pm + 4; + } else { + pm1 = pm; + pm2 = pm + 4; + } + if (p & 2) { + uae_u32 v1 = chipmem_lget_indirect(pm1) & 0x0000ffff; + uae_u32 v2 = chipmem_lget_indirect(pm2) & 0x0000ffff; + v1 |= v1 << 16; + v2 |= v2 << 16; + v = (((uae_u64)v1) << 32) | v2; + } else { + v = ((uae_u64)chipmem_lget_indirect(pm1)) << 32; + v |= chipmem_lget_indirect(pm2); + } +#ifdef DEBUGGER + if (memwatch_enabled) { + debug_getpeekdma_value_long((uae_u32)(v >> 32), p - pm1); + debug_getpeekdma_value_long((uae_u32)(v >> 0), p - pm2); + } + if (debug_dma) { + record_dma_read_value_wide(v, true); + } +#endif + return v; } -void custom_reset(bool hardreset, bool keyboardreset) +static void process_copper(struct rgabuf *r) { - if (hardreset) { - board_prefs_changed(-1, -1); - initial_frame = true; - } - - target_reset(); - devices_reset(hardreset); - write_log(_T("Reset at %08X. Chipset mask = %08X\n"), M68K_GETPC, currprefs.chipset_mask); - memory_map_dump(); - - bool ntsc = currprefs.ntscmode; + uae_u16 id = r->copdat; + int hpos = agnus_hpos; - lightpen_active = 0; - lightpen_triggered = 0; - lightpen_cx[0] = lightpen_cy[0] = -1; - lightpen_cx[1] = lightpen_cy[1] = -1; - lightpen_x[0] = -1; - lightpen_y[0] = -1; - lightpen_x[1] = -1; - lightpen_y[1] = -1; - nr_armed = 0; - next_lineno = 0; - vb_start_line = 1; - if (agnusa1000) { - vb_start_line = 0; + if ((id & 0xf) == 0xf) { + // last cycle was even: cycle 1 got allocated which is unusable for copper + // reads from address zero! +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x1fe, 0, DMARECORD_COPPER, 7); + } +#endif + uae_u16 tmp = chipmem_wget_indirect(0); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(tmp); + record_dma_event(DMA_EVENT_COPPERUSE); + } +#endif + regs.chipset_latch_rw = tmp; + return; } - vb_state = true; - vs_state_var = false; - vs_state_hw = false; - vs_state_on = false; - dmal_htotal_mask = 0xffff; - memset(custom_storage, 0, sizeof(custom_storage)); - toscr_res_old = -1; - toscr_nbits = 0; - update_denise_vars(); - estimated_fm = 0xffff; - exthblank = false; - exthblank_state = false; - hbstrt_v2 = 0; - hbstop_v2 = 0; - hcenter_v2 = 0; - hcenter_active = false; - set_hcenter(); - display_reset = 1; - copper_bad_cycle = 0; - copper_dma_change_cycle = -1; - blitter_dma_change_cycle = -1; - sprite_dma_change_cycle_on = -1; - custom_color_write_cycle = -1; - vt_old = 0; - ht_old = 0; - hdiwstate_blank = diw_states::DIW_waiting_start; - maxvpos_display_vsync_next = false; - hstrobe_conflict = false; - strobe_vblank = 0; - irq_forced_delay = 0; - irq_forced = 0; + switch (cop_state.state) + { - if (hardreset || savestate_state) { - maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; - maxhpos_short = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; - maxvpos = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; - maxvpos_nom = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; - maxvpos_display = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; + case COP_stop: + break; + case COP_strobe_vbl_delay: + { + cop_state.state = COP_strobe_vbl_delay2; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_COPPERUSE); + } +#endif } + break; + case COP_strobe_vbl_delay2: + { + // fake MOVE phase 2 +#ifdef DEBUGGER + // inhibited $8c access + if (debug_dma) { + record_dma_read(0x1fe, cop_state.ip, DMARECORD_COPPER, 6); + } +#endif + cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[1]); + record_dma_event(DMA_EVENT_COPPERUSE); + } +#endif + cop_state.ip = cop_state.strobeip; + cop_state.state = COP_read1; + regs.chipset_latch_rw = cop_state.ir[1]; + } + break; + case COP_strobe_vbl_extra_delay1: +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x8c, cop_state.ip, DMARECORD_COPPER, 6); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } +#endif + cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); + cop_state.ip = cop_state.strobeip; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[0]); + } +#endif + cop_state.state = COP_read1; + break; + case COP_strobe_vbl_extra_delay2: +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x8c, cop_state.ip, DMARECORD_COPPER, 6); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } +#endif + cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); + cop_state.ip += 2; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[0]); + } +#endif + cop_state.state = COP_strobe_vbl_extra_delay3; + break; + case COP_strobe_vbl_extra_delay3: +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x1fe, cop_state.ip, DMARECORD_COPPER, 6); + } +#endif + cop_state.ir[1] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); + cop_state.ip = cop_state.strobeip; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[1]); + } +#endif + cop_state.state = COP_read1; + break; - if (!savestate_state) { - cia_hsync = 0; - extra_cycle = 0; - hsync_counter = 0; - vsync_counter = 0; - display_vsync_counter = 0; - currprefs.chipset_mask = changed_prefs.chipset_mask; - update_mirrors(); - blitter_reset(); - - if (hardreset) { + // cycle after odd strobe write is normal IR2 + case COP_strobe_delay_start_odd: +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, cop_state.ip, DMARECORD_COPPER, 6); + } +#endif + cop_state.ir[1] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[1]); + } +#endif + cop_state.ip += 2; + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + cop_state.state = COP_strobe_delay1_odd; + break; - vtotal = MAXVPOS_LINES_ECS - 1; - htotal = MAXHPOS_ROWS - 1; - hbstrt = 0; - hbstop = 0; - hsstrt = 0; - hsstop = 0; - vbstrt = 0; - vbstop = 0; - vsstrt = 0; - vsstop = 0; - hcenter = 0; + case COP_strobe_delay1_odd: + { + // odd cycle strobe blitter conflict possibility +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_COPPERUSE); + } +#endif + // conflict with blitter: blitter pointer becomes old copper pointer OR blitter pointer + // after the blit cycle, blitter pointer becomes new copper pointer. This is done in blitter emulation. + // copper pointer is not affected by this. + if (r->type & CYCLE_BLITTER) { + r->conflict = r->p; + r->conflictaddr = cop_state.strobeip; + r->p = &dummyrgaaddr; + r->pv |= cop_state.ip; + cop_state.strobeip |= r->bltmod; + } + cop_state.ip = cop_state.strobeip; + cop_state.state = COP_read1; + } + break; - for (int i = 0; i < 32; i++) { - uae_u16 c; - if (i == 0) { - c = ((ecs_denise && !aga_mode) || denisea1000) ? 0xfff : 0x000; - } else { - c |= uaerand(); - c |= uaerand(); - } - c &= 0xfff; - current_colors.color_regs_ecs[i] = c; + case COP_strobe_delay1: + { + if (cop_state.strobetype >= 0) { + uae_u16 reg = cop_state.ir[0] & 0x1FE; + // fake MOVE phase 1 +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, cop_state.ip, DMARECORD_COPPER, 6); } - for (int i = 0; i < 256; i++) { - uae_u32 c = 0; - if (i > 0) { - c |= uaerand(); - c |= uaerand(); - } - c &= 0xffffff; - current_colors.color_regs_aga[i] = c; + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, r->reg); } - if (!aga_mode) { - for (int i = 0; i < 32; i++) { - current_colors.acolors[i] = getxcolor(current_colors.color_regs_ecs[i]); - } -#ifdef AGA +#endif + cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); + if (cop_state.strobetype == 0) { + cop_state.ip = cop_state.strobeip; + cop_state.state = COP_read1; } else { - for (int i = 0; i < 256; i++) { - current_colors.acolors[i] = getxcolor(current_colors.color_regs_aga[i]); + cop_state.ip += 2; + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + cop_state.state = COP_strobe_delay2; + if (cop_state.strobetype == 2) { + if (!test_copper_dangerous(reg, true)) { + custom_wput_copper(cop_state.ip, reg, cop_state.ir[0], 0); + } } -#endif } - lof_store = lof_display = 0; - lof_lace = false; - setextblank(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[0]); + } + if (memwatch_enabled) { + debug_getpeekdma_value(cop_state.ir[0]); + } +#endif + } else { + // fake and hidden MOVE phase 1 + cop_state.ip = cop_state.strobeip; + cop_state.state = COP_read1; } - - clxdat = 0; - - /* Clear the armed flags of all sprites. */ - memset(spr, 0, sizeof spr); - - dmacon = 0; - intreq = intreq2 = 0; - intena = intena2 = 0; - - copcon = 0; - DSKLEN (0, 0); - - bplcon0 = 0; - bplcon4 = 0x0011; /* Get AGA chipset into ECS compatibility mode */ - bplcon3 = 0x0C00; - - bplcon0_saved = bplcon0; - bplcon1_saved = bplcon1; - bplcon2_saved = bplcon2; - bplcon3_saved = bplcon3; - bplcon4_saved = bplcon4; - - diwhigh = 0; - diwhigh_written = 0; - hdiwstate = diw_states::DIW_waiting_start; // this does not reset at vblank - - refptr = 0; - if (aga_mode) { - refptr = 0x1ffffe; + } + break; + case COP_strobe_delay2: + { +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, cop_state.ip, DMARECORD_COPPER, 6); } - refptr_p = refptr; - FMODE(0, 0); - CLXCON(-1, 0); - CLXCON2(-1, 0); - setup_fmodes(0, bplcon0); - beamcon0 = new_beamcon0 = beamcon0_saved = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; - blt_info.blit_main = 0; - blt_info.blit_finald = 0; - blt_info.blit_pending = 0; - blt_info.blit_interrupt = 1; - blt_info.blit_queued = 0; - init_sprites(); - - maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL; - maxhpos_short = maxhpos; - updateextblk(); - - if (currprefs.cs_compatible == CP_DRACO || currprefs.cs_compatible == CP_CASABLANCA) { - // fake draco interrupts - INTENA(0x8000 | 0x4000 | 0x1000 | 0x2000 | 0x0080 | 0x0010 | 0x0008 | 0x0001); +#endif + cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); + regs.chipset_latch_rw = cop_state.ir[1]; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[1]); + } +#endif + if (cop_state.strobetype == 1) { + cop_state.ip = cop_state.strobeip; + } else { + cop_state.ip += 2; } + cop_state.state = COP_read1; } + break; - specialmonitor_reset(); + case COP_strobe_delay_start: + { + cop_state.state = COP_strobe_delay1_odd; + } + break; - unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE)); + case COP_read1: +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x8c, cop_state.ip, DMARECORD_COPPER, 5); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } +#endif + cop_state.ir[0] = regs.chipset_latch_rw = last_custom_value = chipmem_wget_indirect(cop_state.ip); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read_value(cop_state.ir[0]); + } + if (memwatch_enabled) { + debug_getpeekdma_value(cop_state.ir[0]); + } +#endif + cop_state.ip += 2; + cop_state.state = COP_read2; + break; + case COP_read2: + if (cop_state.ir[0] & 1) { + // WAIT or SKIP +#ifdef DEBUGGER + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } +#endif + cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x8c, cop_state.ip, DMARECORD_COPPER, (cop_state.ir[1] & 1) ? 3 : 2); + record_dma_read_value(cop_state.ir[1]); + } + if (memwatch_enabled) { + debug_getpeekdma_value(cop_state.ir[1]); + } +#endif + cop_state.ip += 2; - vpos = 0; - vpos_prev = maxvpos - 1; - vpos_count = vpos_count_diff = 0; +#ifdef DEBUGGER + uaecptr debugip = cop_state.ip; +#endif + cop_state.ignore_next = 0; + if (cop_state.ir[1] & 1) { + cop_state.state = COP_skip_in2; + } else { + cop_state.state = COP_wait_in2; + } - inputdevice_reset(); - timehack_alive = 0; + cop_state.vcmp = (cop_state.ir[0] & (cop_state.ir[1] | 0x8000)) >> 8; + cop_state.hcmp = (cop_state.ir[0] & cop_state.ir[1] & 0xFE); - curr_sprite_entries = 0; - prev_sprite_entries = 0; - sprite_entries[0][0].first_pixel = 0; - sprite_entries[1][0].first_pixel = MAX_SPR_PIXELS; - sprite_entries[0][1].first_pixel = 0; - sprite_entries[1][1].first_pixel = MAX_SPR_PIXELS; - memset(spixels, 0, 2 * MAX_SPR_PIXELS * sizeof *spixels); - memset(&spixstate, 0, sizeof spixstate); - toscr_delay_sh[0] = 0; - toscr_delay_sh[1] = 0; - - vdiwstate = diw_states::DIW_waiting_start; - vdiw_change(0); - check_harddis(); +#ifdef DEBUGGER + if (debug_copper) { + record_copper(debugip - 4, debugip, cop_state.ir[0], cop_state.ir[1], hpos, vpos); + } +#endif - dmal = 0; - init_hz_normal(); - // init_hz sets vpos_count - vpos_count = 0; - vpos_lpen = -1; - lof_changing = 0; - lof_togglecnt_nlace = lof_togglecnt_lace = 0; - //nlace_cnt = NLACE_CNT_NEEDED; + } else { + // MOVE + uae_u16 reg = cop_state.ir[0] & 0x1FE; - audio_reset(); - if (!isrestore()) { - memset(&cop_state, 0, sizeof(cop_state)); - cop_state.state = COP_stop; - /* must be called after audio_reset */ - adkcon = 0; -#ifdef SERIAL_PORT - serial_uartbreak(0); +#ifdef DEBUGGER + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } #endif - audio_update_adkmasks(); - } + cop_state.ir[1] = chipmem_wget_indirect(cop_state.ip); - init_hardware_frame(); - drawing_init(); + uae_u16 data = cop_state.ir[1]; + cop_state.state = COP_read1; - reset_decisions_scanline_start(); - reset_decisions_hsync_start(); + uae_u16 preg = reg; - bogusframe = 1; - vsync_rendered = false; - frame_shown = false; - frame_rendered = false; + // Previous instruction was SKIP that skipped + if (cop_state.ignore_next > 0) { + reg = 0x08c; + } - if (isrestore()) { - uae_u16 v; - uae_u32 vv; + bool dang = test_copper_dangerous(preg, false); - audio_update_adkmasks(); - INTENA(0); - INTREQ(0); - COPJMP(1, 1); - v = bplcon0; - BPLCON0(0, 0); - BPLCON0(0, v); - FMODE(0, fmode); - if (!aga_mode) { - for(int i = 0 ; i < 32 ; i++) { - vv = current_colors.color_regs_ecs[i]; - current_colors.color_regs_ecs[i] = -1; - record_color_change(0, i, vv); - remembered_color_entry = -1; - current_colors.color_regs_ecs[i] = vv; - current_colors.acolors[i] = xcolors[vv]; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(reg, cop_state.ip, DMARECORD_COPPER, dang ? 4 : 1); + record_dma_read_value(cop_state.ir[1]); } -#ifdef AGA - } else { - for(int i = 0 ; i < 256 ; i++) { - vv = current_colors.color_regs_aga[i]; - current_colors.color_regs_aga[i] = -1; - record_color_change(0, i, vv); - remembered_color_entry = -1; - current_colors.color_regs_aga[i] = vv; - current_colors.acolors[i] = CONVERT_RGB(vv); + if (memwatch_enabled) { + debug_getpeekdma_value(cop_state.ir[1]); } #endif - } - CLXCON(-1, clxcon); - CLXCON2(-1, clxcon2); - calcdiw(); -#ifdef SERIAL_PORT - v = serper; - serper = 0; - SERPER(v); -#endif - for (int i = 0; i < 8; i++) { - SPRxCTLPOS(i); - nr_armed += spr[i].armed != 0; - } - if (!currprefs.produce_sound) { - eventtab[ev_audio].active = 0; - events_schedule(); - } - - write_log(_T("CPU=%d Chipset=%s %s\n"), - currprefs.cpu_model, - (aga_mode ? _T("AGA") : - (ecs_agnus && ecs_denise ? _T("Full ECS") : - (ecs_denise ? _T("ECS Denise") : - (ecs_agnus ? _T("ECS") : _T("OCS"))))), - currprefs.ntscmode ? _T("NTSC") : _T("PAL")); - write_log(_T("State restored\n")); - } - - sprres = expand_sprres(bplcon0, bplcon3); - sprite_width = GET_SPRITEWIDTH(fmode); - for (int i = 0; i < MAX_SPRITES; i++) { - spr[i].width = sprite_width; - } - setup_fmodes(0, bplcon0); - shdelay_disabled = false; + cop_state.ip += 2; -#ifdef ACTION_REPLAY - /* Doing this here ensures we can use the 'reset' command from within AR */ - action_replay_reset(hardreset, keyboardreset); -#endif -#if defined(ENFORCER) - enforcer_disable(); +#ifdef DEBUGGER + uaecptr debugip = cop_state.ip; #endif + // was "dangerous" register -> copper stopped + if (dang) { + return; + } - if (hardreset) { - rtc_hardreset(); - } - - // must be last -#ifdef AUTOCONFIG - expamem_reset(hardreset); + if (reg == 0x100) { + // BPLCON0 new value is needed early + //bplcon0_denise_change_early(hpos, data); +#if 0 + cop_state.moveaddr = reg; + cop_state.movedata = data; + cop_state.movedelay = 1; + cop_state.moveptr = cop_state.ip; +#else + custom_wput_copper(cop_state.ip, reg, data, 0); +#endif + } else { + custom_wput_copper(cop_state.ip, reg, data, 0); + } +#ifdef DEBUGGER + if (debug_copper && cop_state.ignore_next <= 0) { + uaecptr next = 0xffffffff; + if (reg == 0x88) { + next = cop1lc; + } else if (reg == 0x8a) { + next = cop2lc; + } + record_copper(debugip - 4, next, cop_state.ir[0], cop_state.ir[1], hpos, vpos); + } #endif + cop_state.ignore_next = 0; + } + regs.chipset_latch_rw = last_custom_value = cop_state.ir[1]; + check_copper_stop(); + break; -#if 0 - record_dma_reset(-1); + case COP_strobe_extra: + // do nothing, happens if CPU wrote to COPxJMP but copper had already requested DMA cycle + // Cycle will complete but nothing will happen because COPxJMP write resets copper state. +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(0x8c, cop_state.ip, DMARECORD_COPPER, 0); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(cop_state.ip, MW_MASK_COPPER, 0x8c); + } #endif - -} - -void custom_dumpstate(int mode) -{ - if (!mode) { - console_out_f(_T("VPOS: %03d ($%03x) HPOS: %03d ($%03x) COP: $%08x\n"), - vpos, vpos, current_hpos(), current_hpos(), - cop_state.ip); + break; + default: + write_log(_T("copper_fetch invalid state %d! %02x\n"), cop_state.state, id); + break; } } -void dumpcustom(void) +static void generate_copper(void) { - console_out_f(_T("DMACON: $%04x INTENA: $%04x ($%04x) INTREQ: $%04x ($%04x) VPOS: %03d ($%03x) HPOS: %03d ($%03x)\n"), - DMACONR(current_hpos()), - intena, intena, intreq, intreq, vpos, vpos, current_hpos(), current_hpos()); - console_out_f(_T("INT: $%04x IPL: %d\n"), intena & intreq, intlev()); - console_out_f(_T("COP1LC: $%08x, COP2LC: $%08x COPPTR: $%08x\n"), cop1lc, cop2lc, cop_state.ip); - console_out_f(_T("DIWSTRT: $%04x DIWSTOP: $%04x DDFSTRT: $%04x DDFSTOP: $%04x\n"), - diwstrt, diwstop, ddfstrt, ddfstop); - console_out_f(_T("BPLCON 0: $%04x 1: $%04x 2: $%04x 3: $%04x 4: $%04x LOF=%d/%d HDIW=%d VDIW=%d\n"), - bplcon0, bplcon1, bplcon2, bplcon3, bplcon4, - lof_display, lof_store, - hdiwstate == diw_states::DIW_waiting_start ? 0 : 1, vdiwstate == diw_states::DIW_waiting_start ? 0 : 1); - if (timeframes && vsync_counter) { - console_out_f(_T("Average frame time: %.2f ms [frames: %d time: %d]\n"), - (double)frametime / timeframes, vsync_counter, frametime); - if (total_skipped) - console_out_f(_T("Skipped frames: %d\n"), total_skipped); - } -} + int hpos = agnus_hpos; -static void gen_custom_tables(void) -{ - for (int i = 0; i < 256; i++) { - sprtaba[i] = ((((i >> 7) & 1) << 0) - | (((i >> 6) & 1) << 2) - | (((i >> 5) & 1) << 4) - | (((i >> 4) & 1) << 6) - | (((i >> 3) & 1) << 8) - | (((i >> 2) & 1) << 10) - | (((i >> 1) & 1) << 12) - | (((i >> 0) & 1) << 14)); - sprtabb[i] = sprtaba[i] * 2; - sprite_ab_merge[i] = (((i & 15) ? 1 : 0) - | ((i & 240) ? 2 : 0)); - } - for (int i = 0; i < 16; i++) { - clxmask[i] = (((i & 1) ? 0xF : 0x3) - | ((i & 2) ? 0xF0 : 0x30) - | ((i & 4) ? 0xF00 : 0x300) - | ((i & 8) ? 0xF000 : 0x3000)); - sprclx[i] = (((i & 0x3) == 0x3 ? 1 : 0) - | ((i & 0x5) == 0x5 ? 2 : 0) - | ((i & 0x9) == 0x9 ? 4 : 0) - | ((i & 0x6) == 0x6 ? 8 : 0) - | ((i & 0xA) == 0xA ? 16 : 0) - | ((i & 0xC) == 0xC ? 32 : 0)) << 9; + if ((hpos & 1) != COPPER_CYCLE_POLARITY) { + // copper does not advance if hpos bit 0 didn't toggle + if ((hpos & 1) == (agnus_hpos_prev & 1)) { + switch (cop_state.state) + { + case COP_read1: + case COP_read2: + case COP_wait: + case COP_skip: + case COP_strobe_delay1: + { + generate_copper_cycle_if_free(CYCLE_PIPE_COPPER | 0xf); + } + break; + } + } + return; } -} - -/* mousehack is now in "filesys boot rom" */ -static uae_u32 REGPARAM2 mousehack_helper_old(struct TrapContext *ctx) -{ - return 0; -} - -int custom_init(void) -{ - -#ifdef AUTOCONFIG - if (uae_boot_rom_type) { - uaecptr pos; - pos = here(); - - org(rtarea_base + 0xFF70); - calltrap(deftrap(mousehack_helper_old)); - dw(RTS); - - org(rtarea_base + 0xFFA0); - calltrap(deftrap(timehack_helper)); - dw(RTS); - org(pos); + if ((hpos & 1) == (agnus_hpos_prev & 1)) { + return; } -#endif - - gen_custom_tables(); - build_blitfilltable(); - drawing_init(); - - update_mirrors(); - create_cycle_diagram_table(); + bool bus_allocated = !check_rga_free_slot_in(); - return 1; -} + switch (cop_state.state) + { + case COP_strobe_vbl_delay2: + // Second cycle after COPJMP does basically skipped MOVE (MOVE to 1FE) + // Cycle is used and needs to be free. + generate_copper_cycle_if_free(CYCLE_PIPE_COPPER); + break; -/* Custom chip memory bank */ + case COP_strobe_delay_start_odd: + { + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + if (hpos == 1 && !bus_allocated) { + // if COP_strobe_delay2 crossed scanlines, it will be skipped! + struct rgabuf *rga = generate_copper_cycle_if_free(CYCLE_PIPE_COPPER); + rga->reg = 0x1fe; + cop_state.state = COP_strobe_delay1; + cop_state.strobetype = 0; + } else { + cop_state.state = COP_strobe_delay1_odd; + // not allocated + struct rgabuf *rga = read_rga_in(); + if (rga) { + rga->type |= CYCLE_COPPER; + rga->copdat = 0; + if (!rga->alloc) { + rga->alloc = -1; + } + } + } + } + break; -static uae_u32 REGPARAM3 custom_lget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 custom_wget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 custom_bget (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 custom_lgeti (uaecptr) REGPARAM; -static uae_u32 REGPARAM3 custom_wgeti (uaecptr) REGPARAM; -static void REGPARAM3 custom_lput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 custom_wput (uaecptr, uae_u32) REGPARAM; -static void REGPARAM3 custom_bput (uaecptr, uae_u32) REGPARAM; + case COP_strobe_delay1_odd: + { + cop_state.state = COP_strobe_delay1_odd; + if (cop_state.strobe) { + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + } + // not allocated + struct rgabuf *rga = read_rga_in(); + if (rga) { + rga->type |= CYCLE_COPPER; + rga->copdat = 0; + if (!rga->alloc) { + rga->alloc = -1; + } + } + } + break; -addrbank custom_bank = { - custom_lget, custom_wget, custom_bget, - custom_lput, custom_wput, custom_bput, - default_xlate, default_check, NULL, NULL, _T("Custom chipset"), - custom_lgeti, custom_wgeti, - ABFLAG_IO, S_READ, S_WRITE, NULL, 0x1ff, 0xdff000 -}; + case COP_strobe_delay_start: + if (hpos == 1 && get_cycles() > cop_state.strobe_cycles) { + cop_state.state = COP_strobe_delay1_odd; + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + // not allocated + struct rgabuf *rga = read_rga_in(); + if (rga) { + rga->type |= CYCLE_COPPER; + rga->copdat = 0; + if (!rga->alloc) { + rga->alloc = -1; + } + } + } else { + cop_state.state = COP_strobe_delay1; + } + break; -static uae_u32 REGPARAM2 custom_wgeti (uaecptr addr) -{ - if (currprefs.cpu_model >= 68020 && !currprefs.cpu_compatible) - return dummy_wgeti (addr); - return custom_wget (addr); -} -static uae_u32 REGPARAM2 custom_lgeti (uaecptr addr) -{ - if (currprefs.cpu_model >= 68020 && !currprefs.cpu_compatible) - return dummy_lgeti (addr); - return custom_lget (addr); -} + case COP_strobe_delay1: + // First cycle after COPJMP. This is the strange one. + // This cycle does not need to be free + // But it still gets allocated by copper if it is free = CPU and blitter can't use it. + if (bus_allocated) { + cop_state.state = COP_strobe_delay2; + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + } else { + if (hpos == 1 && get_cycles() > cop_state.strobe_cycles) { + // if COP_strobe_delay2 crossed scanlines, it will be skipped! + cop_state.strobetype = 0; + } + if (cop_state.strobetype == 0) { + cop_state.strobeip = getstrobecopip(); + cop_state.strobe = 0; + } + cop_state.state = COP_strobe_delay1; + // allocated and $1fe, not $08c + struct rgabuf *rga = generate_copper_cycle_if_free(0x08); + if (cop_state.strobetype == 0) { + if (rga) { + rga->reg = 0x1fe; + } + } + } + break; + case COP_strobe_delay2: + { + struct rgabuf *rga = generate_copper_cycle_if_free(CYCLE_PIPE_COPPER); + if (cop_state.strobe && cop_state.strobetype == 1) { + cop_state.strobe = 0; + if (rga) { + rga->reg = 0x1fe; + } + } + } + break; -static uae_u32 REGPARAM2 custom_wget_1(int hpos, uaecptr addr, int noput, bool isbyte) -{ - uae_u16 v; - int missing; -#if CUSTOM_DEBUG > 2 - write_log (_T("%d:%d:wget: %04X=%04X pc=%p\n"), current_hpos(), vpos, addr, addr & 0x1fe, m68k_getpc ()); -#endif -#ifdef DEBUGGER - if (memwatch_access_validator) - debug_check_reg(addr, 0, 0); -#endif + case COP_strobe_vbl_extra_delay3: + { + struct rgabuf *rga = generate_copper_cycle_if_free(CYCLE_PIPE_COPPER); + if (cop_state.strobe && cop_state.strobetype == 1) { + cop_state.strobe = 0; + if (rga) { + rga->reg = 0x1fe; + } + } + } + break; - addr &= 0xfff; + // Request IR1 + case COP_read1: + generate_copper_cycle_if_free(CYCLE_PIPE_COPPER | 0x02); + break; - switch (addr & 0x1fe) { - case 0x002: v = DMACONR(hpos); break; - case 0x004: v = VPOSR(); break; - case 0x006: v = VHPOSR(); break; + // Request IR2 + case COP_read2: + generate_copper_cycle_if_free(CYCLE_PIPE_COPPER | 0x03); + break; - case 0x00A: v = JOY0DAT(); break; - case 0x00C: v = JOY1DAT(); break; - case 0x00E: v = CLXDAT(hpos); break; - case 0x010: v = ADKCONR(); break; + // WAIT: Got IR2, first idle cycle. + // Need free cycle, cycle not allocated. + case COP_wait_in2: + { + if (bus_allocated) { + break; + } + cop_state.state = COP_wait1; + } + break; - case 0x012: v = POT0DAT(); break; - case 0x014: v = POT1DAT(); break; - case 0x016: v = POTGOR(); break; -#ifdef SERIAL_PORT - case 0x018: v = SERDATR(); break; -#else - case 0x018: v = 0x3000 /* no data */; break; + // WAIT: Second idle cycle. Wait until comparison matches. + // Need free cycle, cycle not allocated. + case COP_wait1: + { + int comp = coppercomp(hpos, true); + if (comp < 0) { + // If we need to wait for later scanline or blitter: no need to emulate copper cycle-by-cycle + if (cop_state.ir[0] == 0xFFFF && cop_state.ir[1] == 0xFFFE && maxhpos < 250) { + cop_state.state = COP_waitforever; + } + if (cop_state.strobe_next == COP_stop) { + copper_enabled_thisline = 0; + } +#ifdef DEBUGGER + if (debug_dma && comp == -2) { + record_dma_event(DMA_EVENT_COPPERWAKE2); + } #endif - case 0x01A: v = DSKBYTR(hpos); break; - case 0x01C: v = INTENAR(); break; - case 0x01E: v = INTREQR(); break; - case 0x07C: - v = DENISEID(&missing); - if (missing) - goto writeonly; - break; + break; + } - case 0x1DA: - if (!ecs_agnus) - goto writeonly; - v = HHPOSR(); - break; + if (comp) { + break; + } -#ifdef AGA - case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: - case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: - case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: - case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: - case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: - case 0x1BC: case 0x1BE: - if (!aga_mode) - goto writeonly; - v = COLOR_READ((addr & 0x3E) / 2); - break; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_COPPERWAKE2); + record_dma_event(DMA_EVENT_COPPERWAKE); + } #endif + if (bus_allocated) { + break; + } - default: -writeonly: - /* OCS/ECS: - * reading write-only register causes write with last value in chip - * bus (custom registers, chipram, slowram) - * and finally returns either all ones or something weird if DMA happens - * in next (or previous) cycle.. FIXME. - * - * OCS-only special case: DFF000 (BLTDDAT) will always return whatever was left in bus - * - * AGA: - * Can also return last CPU accessed value - * Remembers old regs.chipset_latch_rw - */ - v = regs.chipset_latch_rw; - SET_LINE_CYCLEBASED(hpos); - if (!noput) { - int r, c, bmdma; - uae_u16 l; + cop_state.state = COP_wait; + } + break; - if (aga_mode) { - l = 0; - } else { - // last chip bus value (read or write) is written to register - if (currprefs.cpu_compatible && currprefs.cpu_model == 68000) { - if (isbyte) - l = (regs.chipset_latch_rw << 8) | (regs.chipset_latch_rw & 0xff); - else - l = regs.chipset_latch_rw; - } else { - l = regs.chipset_latch_rw; + // Wait finished, request IR1. + case COP_wait: + { + if (!generate_copper_cycle_if_free(CYCLE_PIPE_COPPER | 0x04)) { + break; } - } - decide_line(hpos); - decide_fetch_safe(hpos); - decide_blitter(hpos); #ifdef DEBUGGER - debug_wputpeek(0xdff000 + addr, l); + if (debug_dma) { + record_dma_event(DMA_EVENT_COPPERWAKE); + } + if (debug_copper) { + record_copper(cop_state.ip - 4, 0xffffffff, cop_state.ir[0], cop_state.ir[1], hpos, vpos); + } #endif - r = custom_wput_1(hpos, addr, l, 1); - - // CPU gets back (OCS/ECS only): - // - if last cycle was DMA cycle: DMA cycle data - // - if last cycle was not DMA cycle: FFFF or some ANDed old data. - // - if (hpos == 0) { - int hp = maxhpos - 1; - c = cycle_line_slot_last & CYCLE_MASK; - bmdma = bitplane_dma_access(hp, 0); + cop_state.state = COP_read1; + } + break; + + // SKIP: Got IR2. First idle cycle. + // Free cycle needed, cycle not allocated. + case COP_skip_in2: + + if (bus_allocated) { + break; + } + cop_state.state = COP_skip1; + break; + + // SKIP: Second idle cycle. Do nothing. + // Free cycle needed, cycle not allocated. + case COP_skip1: + + if (bus_allocated) { + break; + } + + cop_state.state = COP_skip; + break; + + // Check comparison. SKIP finished. Request IR1. + case COP_skip: + if (!generate_copper_cycle_if_free(CYCLE_PIPE_COPPER | 0x005)) { + break; + } + + if (!coppercomp(hpos, false)) { + cop_state.ignore_next = 1; } else { - int hp = hpos - 1; - c = cycle_line_slot[hp] & CYCLE_MASK; - bmdma = bitplane_dma_access(hp, 0); + cop_state.ignore_next = -1; } - if (aga_mode) { - if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) { - v = regs.chipset_latch_rw; - } else if (c == CYCLE_CPU) { - v = regs.db; + +#ifdef DEBUGGER + if (debug_dma) { + if (cop_state.ignore_next > 0) { + record_dma_event(DMA_EVENT_COPPERSKIP); } else { - v = regs.chipset_latch_rw >> ((addr & 2) ? 0 : 16); + record_dma_event(DMA_EVENT_COPPERWAKE2); } - } else { - if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) { - v = regs.chipset_latch_rw; + } + if (debug_copper) { + record_copper(cop_state.ip - 4, 0xffffffff, cop_state.ir[0], cop_state.ir[1], hpos, vpos); + } +#endif + + cop_state.state = COP_read1; + break; + + case COP_strobe_extra: + // Wait 1 copper cycle doing nothing + cop_state.state = COP_strobe_delay1; + break; + + default: + break; + } + + if (cop_state.strobe_next != COP_stop) { + cop_state.state = cop_state.strobe_next; + cop_state.strobe_next = COP_stop; + } +} + +// Because BPL and SPR DMA is decided 1 CCK earlier than others +// PT and MOD need to be loaded in following cycle, cycle +// when request goes to DMA addressing logic. +static void bitplane_rga_ptmod(void) +{ + struct rgabuf *r = read_rga_in(); + if (r->alloc > 0) { + if (r->type == CYCLE_BITPLANE) { + int bpl = r->bpldat & 7; + bool domod = (r->bpldat & 8) != 0; + int mod = 0; + if (domod) { + if (fmode & 0x4000) { + if (((diwstrt >> 8) ^ (vpos ^ 1)) & 1) { + mod = bpl1mod; + } else { + mod = bpl2mod; + } } else { - // refresh checked because refresh cycles do not always - // set regs.chipset_latch_rw for performance reasons. - v = 0xffff; + mod = (bpl & 1) ? bpl2mod : bpl1mod; } } -#if CUSTOM_DEBUG > 0 - write_log (_T("%08X read = %04X. Value written=%04X PC=%08x\n"), 0xdff000 | addr, v, l, M68K_GETPC); -#endif - return v; + r->p = &bplpt[bpl]; + r->pv = *r->p; + r->bplmod = mod; + } else if (r->type == CYCLE_SPRITE) { + int num = r->sprdat & 7; + struct sprite *s = &spr[num]; + r->p = &s->pt; + r->pv = *r->p; } } - return v; } -static uae_u32 custom_wget2(uaecptr addr, bool byte) +// Generate UHRES (0x78, 0x7A) RGA slots +static void generate_uhres(void) { - uae_u32 v; - int hpos = current_hpos(); - - sync_copper(hpos); - v = custom_wget_1 (hpos, addr, 0, byte); -#ifdef ACTION_REPLAY -#ifdef ACTION_REPLAY_COMMON - addr &= 0x1fe; - ar_custom[addr + 0] = (uae_u8)(v >> 8); - ar_custom[addr + 1] = (uae_u8)(v); -#endif -#endif - return v; + if ((dmacon & DMA_MASTER) && check_rga_free_slot_in()) { + if (uhres_state > 0) { + uhres_state++; + } + if (agnus_hpos == 1 && !beamcon0_dual) { + // !DUAL: trigger is START + uhres_state = 2; + } else if (hhpos == 0 && beamcon0_dual) { + // DUAL: trigger is HHPOS reset + uhres_state = 1; + } + if (uhres_spr && (uhres_state == 4 || uhres_state == 6)) { + struct rgabuf *r = write_rga(RGA_SLOT_IN, CYCLE_UHRESSPR, 0x078, NULL); + r->p = &hhspr; + r->pv = *r->p; + } + if (uhres_bpl && (uhres_state == 5)) { + struct rgabuf *r = write_rga(RGA_SLOT_IN, CYCLE_UHRESBPL, 0x07a, NULL); + r->bplmod = bplhmod; + r->p = &hhbpl; + r->pv = *r->p; + } + } } -static uae_u32 REGPARAM2 custom_wget(uaecptr addr) +static void bpl_dma_normal_stop(int hpos) { - uae_u32 v; - - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) - return dummy_get(addr, 2, false, 0); - if (addr & 1) { #ifdef DEBUGGER - debug_invalid_reg(addr, 2, 0); + if (debug_dma && bprun) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, false); + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, false); + } #endif - /* think about move.w $dff005,d0.. (68020+ only) */ - addr &= ~1; - v = custom_wget2(addr, false) << 8; - v |= custom_wget2(addr + 2, false) >> 8; - return v; + ddf_stopping = 0; + bprun = 0; + bprun_end = get_cycles(); + plfstrt_sprite = 0x100; + if (!ecs_agnus) { + ddf_limit = true; + } + if (hpos > ddflastword_total) { + ddflastword_total = hpos; + } + if (bplcon0_planes > 0 && linear_vpos > plflastline_total) { + plflastline_total = linear_vpos; } - return custom_wget2(addr, false); } -static uae_u32 REGPARAM2 custom_bget(uaecptr addr) +STATIC_INLINE bool islastbplseq(void) { - uae_u32 v; - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) - return dummy_get(addr, 1, false, 0); -#ifdef DEBUGGER - debug_invalid_reg(addr, 1, 0); -#endif - v = custom_wget2(addr & ~1, true); - v >>= (addr & 1) ? 0 : 8; - return v; + bool last = (bprun_cycle & fetchunit_mask) == fetchunit_mask; + // AGA stops all fetches after 8 cycles + if (aga_mode && ddf_stopping == 2) { + last = (bprun_cycle & 7) == 7; + } + return last; } -static uae_u32 REGPARAM2 custom_lget (uaecptr addr) +static void generate_bpl(bool clock) { - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) - return dummy_get(addr, 4, false, 0); - return ((uae_u32)custom_wget(addr) << 16) | custom_wget (addr + 2); + if (bprun > 0) { + int hpos = agnus_hpos; + bool last = islastbplseq(); + int cycle_pos = bprun_cycle & fetchstart_mask; + if (dmacon_bpl) { + bool domod = false; + if (ddf_stopping == 2) { + int cycle = bprun_cycle & 7; + if (fm_maxplane == 8 || (fm_maxplane == 4 && cycle >= 4) || (fm_maxplane == 2 && cycle >= 6)) { + domod = true; + } + } + int plane = bpl_sequence[cycle_pos]; + if (plane >= 1 && plane <= bplcon0_planes_limit) { + int bpl = plane - 1; + struct rgabuf *rga = write_rga(RGA_SLOT_BPL, CYCLE_BITPLANE, 0x110 + bpl * 2, NULL); + rga->bpldat = bpl | (domod ? 8 : 0); + } + } + if (clock) { + bprun_cycle++; + } + if (last) { + if (ddf_stopping == 2) { + bpl_dma_normal_stop(hpos); + } + if (ddf_stopping == 1) { + ddf_stopping = 2; + } + } + } } -static int REGPARAM2 custom_wput_1 (int hpos, uaecptr addr, uae_u32 value, int noget) + +static void decide_bpl(int hpos) { - uaecptr oaddr = addr; - addr &= 0x1FE; - value &= 0xffff; - custom_storage[addr >> 1].value = (uae_u16)value; - custom_storage[addr >> 1].pc = copper_access ? cop_state.ip | 1 : M68K_GETPC; -#ifdef ACTION_REPLAY -#ifdef ACTION_REPLAY_COMMON - ar_custom[addr + 0]=(uae_u8)(value >> 8); - ar_custom[addr + 1]=(uae_u8)(value); + bool dma = dmacon_bpl; + bool diw = vdiwstate == diw_states::DIW_waiting_stop; + + if (ecs_agnus) { + // ECS/AGA + + + if (bprun < 0 && (hpos & 1)) { + bprun = 1; + bprun_cycle = 0; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, true); + } +#endif + } + +#if 0 + // BPRUN latched: off + if (bprun == 3) { + if (ddf_stopping == 1) { + // If bpl sequencer counter was all ones (last cycle of block): ddf passed jumps to last step. + if (islastbplseq()) { + ddf_stopping = 2; + } + } + bprun = 0; + bprun_end = hpos; + } #endif + + // DDFSTRT == DDFSTOP: BPRUN gets enabled and DDF passed state in next cycle. + if (ddf_enable_on < 0) { + ddf_enable_on = 0; + if (bprun && !ddf_stopping) { + ddf_stopping = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } #endif + } + } + + // Hard start limit + if (hpos == (0x18 | 0)) { + ddf_limit = false; + } + + // DDFSTRT + if (hpos == ddfstrt) { + ddf_enable_on = 1; + } + + // Hard stop limit + if (hpos == (0xd7 + 0)) { + // Triggers DDFSTOP condition if hard limits are not disabled. + ddf_limit = true; + if (bprun && !ddf_stopping) { + if (!harddis_h) { + ddf_stopping = 1; #ifdef DEBUGGER - if (memwatch_access_validator) { - debug_check_reg(oaddr, 1, value); - } + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } #endif + } + } + } - switch (addr) { - case 0x00E: CLXDAT(hpos); break; + // DDFSTOP + // Triggers DDFSTOP condition. + // Clears DDF allowed flag. + if (hpos == (ddfstop | 0)) { + if (bprun && !ddf_stopping) { + ddf_stopping = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } +#endif + } + if (ddfstop != ddfstrt) { + if (ddf_enable_on) { + ddf_enable_on = -1; + } else { + ddf_enable_on = 0; + } + } + } - case 0x020: DSKPTH(value); break; - case 0x022: DSKPTL(value); break; - case 0x024: DSKLEN(value, hpos); break; - case 0x026: /* DSKDAT(value). Writing to DMA write registers won't do anything */; break; - case 0x028: REFPTR(hpos, value); break; - case 0x02A: VPOSW(hpos, value); break; - case 0x02C: VHPOSW(value); break; - case 0x02E: COPCON(value); break; -#ifdef SERIAL_PORT - case 0x030: SERDAT(value); break; - case 0x032: SERPER(value); break; -#else - case 0x030: break; - case 0x032: break; + // BPRUN can only start if DMA, DIW or DDF state has changed since last time + if (!(hpos & 1)) { + bool hwi = dma && diw && ddf_enable_on > 0 && (!ddf_limit || harddis_h); + if (!bprun && dma && diw && hwi && !hwi_old) { + // Bitplane sequencer activated + bprun = -1; + if (plfstrt_sprite > hpos + 1) { + plfstrt_sprite = hpos + 1; + } + bprun_start(hpos); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_DDFSTRT); + } +#endif + } + hwi_old = hwi; + } + + if (bprun == 2) { + bprun = 0; + // If DDF has passed, jumps to last step. + // (For example Scoopex Crash landing crack intro) + if (ddf_stopping == 1) { + ddf_stopping = 2; + } else if (ddf_stopping == 0) { + // If DDF has not passed, set it as passed. + ddf_stopping = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } +#endif + } + plfstrt_sprite = 0x100; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, false); + } #endif - case 0x034: POTGO(value); break; + } - case 0x038: - strobe_vblank = 1; - break; - case 0x03a: - if (ecs_denise) { - strobe_vblank = 1; + // DIW or DMA switched off: clear BPRUN + if ((!dma || !diw) && bprun == 1) { + bprun = 2; + if (ddf_stopping == 1) { + ddf_stopping = 2; + bprun = 0; + plfstrt_sprite = 0x100; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, false); + } +#endif + } } - break; - case 0x03c: - strobe_vblank = 0; - break; - case 0x040: BLTCON0(hpos, value); break; - case 0x042: BLTCON1(hpos, value); break; + } else { - case 0x044: BLTAFWM(hpos, value); break; - case 0x046: BLTALWM(hpos, value); break; + // OCS - case 0x050: BLTAPTH(hpos, value); break; - case 0x052: BLTAPTL(hpos, value); break; - case 0x04C: BLTBPTH(hpos, value); break; - case 0x04E: BLTBPTL(hpos, value); break; - case 0x048: BLTCPTH(hpos, value); break; - case 0x04A: BLTCPTL(hpos, value); break; - case 0x054: BLTDPTH(hpos, value); break; - case 0x056: BLTDPTL(hpos, value); break; + // DDFSTOP + // Triggers DDFSTOP condition. + if (hpos == (ddfstop | 0)) { + if (bprun > 0 && !ddf_stopping) { + ddf_stopping = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } +#endif + } + } - case 0x058: BLTSIZE(hpos, value); break; + // BPRUN latched: On + if (bprun < 0 && (hpos & 1)) { + bprun = 1; + bprun_cycle = 0; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, true); + } +#endif + } +#if 0 + // BPRUN latched: off + if (bprun == 3) { + bprun = 0; + bprun_end = hpos; + plfstrt_sprite = 0x100; + } +#endif - case 0x064: BLTAMOD(hpos, value); break; - case 0x062: BLTBMOD(hpos, value); break; - case 0x060: BLTCMOD(hpos, value); break; - case 0x066: BLTDMOD(hpos, value); break; + // Hard start limit + if (hpos == 0x18) { + ddf_limit = false; + } - case 0x070: BLTCDAT(hpos, value); break; - case 0x072: BLTBDAT(hpos, value); break; - case 0x074: BLTADAT(hpos, value); break; + // Hard stop limit + // Triggers DDFSTOP condition. Last cycle of bitplane DMA resets DDFSTRT limit. + if (hpos == (0xd7 + 0)) { + if (bprun && !ddf_stopping) { + ddf_stopping = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN2, true); + } +#endif + } + } - case 0x07E: DSKSYNC(hpos, value); break; + // DDFSTRT + if (hpos == ddfstrt) { + ddfstrt_match = true; + } else { + ddfstrt_match = false; + } - case 0x080: COP1LCH(value); break; - case 0x082: COP1LCL(value); break; - case 0x084: COP2LCH(value); break; - case 0x086: COP2LCL(value); break; + if (!ddf_limit && ddfstrt_match && !bprun && dma && diw) { + // Bitplane sequencer activated + bprun = -1; + if (plfstrt_sprite > hpos) { + plfstrt_sprite = hpos; + } + bprun_start(hpos); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event(DMA_EVENT_DDFSTRT); + } +#endif + } - case 0x088: COPJMP(1, 0); break; - case 0x08A: COPJMP(2, 0); break; + if (bprun == 2) { + // If DDF has passed, jumps to last step. + // (For example Scoopex Crash landing crack intro) + if (ddf_stopping == 1) { + ddf_stopping = 2; + } + bprun = 0; + plfstrt_sprite = 0x100; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, false); + } +#endif + } - case 0x08E: DIWSTRT(hpos, value); break; - case 0x090: DIWSTOP(hpos, value); break; - case 0x092: DDFSTRT(hpos, value); break; - case 0x094: DDFSTOP(hpos, value); break; + // DMA or DIW off: clear BPRUN + if ((!dma || !diw) && bprun == 1) { + bprun = 2; + if (ddf_stopping == 1) { + ddf_stopping = 2; + bprun = 0; + plfstrt_sprite = 0x100; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_BPRUN, false); + } +#endif + } + } + } +} - case 0x096: DMACON(hpos, value); break; - case 0x098: CLXCON(hpos, value); break; - case 0x09A: INTENA(value); break; - case 0x09C: INTREQ(value); break; - case 0x09E: ADKCON(hpos, value); break; +static void check_bpl_vdiw(void) +{ + bool forceoff = (agnus_bsvb && !harddis_v); + bool start = vpos == plffirstline && !forceoff; + // VB start line forces vertical display window off (if HARDDIS=0) + bool end = vpos == plflastline || forceoff; - case 0x0A0: AUDxLCH(0, value); break; - case 0x0A2: AUDxLCL(0, value); break; - case 0x0A4: AUDxLEN(0, value); break; - case 0x0A6: AUDxPER(0, value); break; - case 0x0A8: AUDxVOL(0, value); break; - case 0x0AA: AUDxDAT(0, value); break; + if (start && !end) { + vdiwstate = diw_states::DIW_waiting_stop; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_VDIW, true); + } +#endif + } else if (end) { + vdiwstate = diw_states::DIW_waiting_start; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_VDIW, false); + } +#endif + } +} - case 0x0B0: AUDxLCH(1, value); break; - case 0x0B2: AUDxLCL(1, value); break; - case 0x0B4: AUDxLEN(1, value); break; - case 0x0B6: AUDxPER(1, value); break; - case 0x0B8: AUDxVOL(1, value); break; - case 0x0BA: AUDxDAT(1, value); break; +static void generate_sprites(int num, int slot) +{ + int hp = agnus_hpos; - case 0x0C0: AUDxLCH(2, value); break; - case 0x0C2: AUDxLCL(2, value); break; - case 0x0C4: AUDxLEN(2, value); break; - case 0x0C6: AUDxPER(2, value); break; - case 0x0C8: AUDxVOL(2, value); break; - case 0x0CA: AUDxDAT(2, value); break; + if (slot == 0 || slot == 2) { + struct sprite *s = &spr[num]; + if (slot == 0) { + s->firstslotdone = false; + if (!s->dmacycle && s->dmastate) { + s->dmacycle = 1; + } + if (vpos == s->vstart) { + s->dmastate = 1; + s->dmacycle = 1; + if (num == 0 && slot == 0) { + cursorsprite(s); + } + } + if (vpos == s->vstop || agnus_vb_active_end_line) { + s->dmastate = 0; + s->dmacycle = 1; + } + } + if (dmaen(DMA_SPRITE) && s->dmacycle) { + bool dodma = false; - case 0x0D0: AUDxLCH(3, value); break; - case 0x0D2: AUDxLCL(3, value); break; - case 0x0D4: AUDxLEN(3, value); break; - case 0x0D6: AUDxPER(3, value); break; - case 0x0D8: AUDxVOL(3, value); break; - case 0x0DA: AUDxDAT(3, value); break; + if (hp <= plfstrt_sprite) { + dodma = true; +#ifdef AGA + if (dodma && s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) { + dodma = false; + } +#endif + if (dodma) { + uae_u32 dat = CYCLE_PIPE_SPRITE | (s->dmastate ? 0x10 : 0x00) | (s->dmacycle == 1 ? 0 : 8) | num; + int reg = 0x140 + slot + num * 8 + (s->dmastate ? 4 : 0); + struct rgabuf *rga = write_rga(RGA_SLOT_BPL, CYCLE_SPRITE, reg, &s->pt); + s->firstslotdone = true; + if (get_cycles() == sprite_dma_change_cycle_on) { + // If sprite DMA is switched on just when sprite DMA is decided, channel is still decided but it is not allocated! + // Blitter can use this cycle, causing a conflict. + rga->alloc = 0; + rga->conflict = &s->pt; + } else if (get_cycles() == bprun_end) { + // last bitplane cycle is available for sprites (if bitplane ends before all sprites) + } + rga->sprdat = dat; + } + } + } + if (s->dmacycle) { + s->dmacycle++; + if (s->dmacycle > 2) { + s->dmacycle = 0; + if (s->dmastate) { + s->dmacycle = 1; + } + } + } + } +} - case 0x0E0: BPLxPTH(hpos, value, 0); break; - case 0x0E2: BPLxPTL(hpos, value, 0); break; - case 0x0E4: BPLxPTH(hpos, value, 1); break; - case 0x0E6: BPLxPTL(hpos, value, 1); break; - case 0x0E8: BPLxPTH(hpos, value, 2); break; - case 0x0EA: BPLxPTL(hpos, value, 2); break; - case 0x0EC: BPLxPTH(hpos, value, 3); break; - case 0x0EE: BPLxPTL(hpos, value, 3); break; - case 0x0F0: BPLxPTH(hpos, value, 4); break; - case 0x0F2: BPLxPTL(hpos, value, 4); break; - case 0x0F4: BPLxPTH(hpos, value, 5); break; - case 0x0F6: BPLxPTL(hpos, value, 5); break; - case 0x0F8: BPLxPTH(hpos, value, 6); break; - case 0x0FA: BPLxPTL(hpos, value, 6); break; - case 0x0FC: BPLxPTH(hpos, value, 7); break; - case 0x0FE: BPLxPTL(hpos, value, 7); break; - - case 0x100: BPLCON0(hpos, value); break; - case 0x102: BPLCON1(hpos, value); break; - case 0x104: BPLCON2(hpos, value); break; -#ifdef ECS_DENISE - case 0x106: BPLCON3(hpos, value); break; -#endif - case 0x108: BPL1MOD(hpos, value); break; - case 0x10A: BPL2MOD(hpos, value); break; -#ifdef AGA - case 0x10E: CLXCON2(hpos, value); break; -#endif - case 0x110: BPLxDAT(hpos, 0, value); break; - case 0x112: BPLxDAT(hpos, 1, value); break; - case 0x114: BPLxDAT(hpos, 2, value); break; - case 0x116: BPLxDAT(hpos, 3, value); break; - case 0x118: BPLxDAT(hpos, 4, value); break; - case 0x11A: BPLxDAT(hpos, 5, value); break; - case 0x11C: BPLxDAT(hpos, 6, value); break; - case 0x11E: BPLxDAT(hpos, 7, value); break; +#define DMAL_REFRESH0 (1 << 1) +#define DMAL_REFRESH1 (1 << 2) +#define DMAL_REFRESH2 (1 << 3) +#define DMAL_REFRESH3 (1 << 4) +#define DMAL_DSK0 (1 << 5) +#define DMAL_DSK1 (1 << 6) +#define DMAL_DSK2 (1 << 7) +#define DMAL_AUD0 (1 << 8) +#define DMAL_AUD1 (1 << 9) +#define DMAL_AUD2 (1 << 10) +#define DMAL_AUD3 (1 << 11) +// sprites have earlier DMA decisions +#define DMAL_SPR0A (1 << 11) +#define DMAL_SPR0B (1 << 12) +#define DMAL_SPR1A (1 << 13) +#define DMAL_SPR1B (1 << 14) +#define DMAL_SPR2A (1 << 15) +#define DMAL_SPR2B (1 << 16) +#define DMAL_SPR3A (1 << 17) +#define DMAL_SPR3B (1 << 18) +#define DMAL_SPR4A (1 << 19) +#define DMAL_SPR4B (1 << 20) +#define DMAL_SPR5A (1 << 21) +#define DMAL_SPR5B (1 << 22) +#define DMAL_SPR6A (1 << 23) +#define DMAL_SPR6B (1 << 24) +#define DMAL_SPR7A (1 << 25) +#define DMAL_SPR7B (1 << 26) - case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: - case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: - case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: - case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: - case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: - case 0x1BC: case 0x1BE: - COLOR_WRITE(hpos, value & 0x8FFF, (addr & 0x3E) / 2); - break; - case 0x120: case 0x124: case 0x128: case 0x12C: - case 0x130: case 0x134: case 0x138: case 0x13C: - SPRxPTH(hpos, value, (addr - 0x120) / 4); - break; - case 0x122: case 0x126: case 0x12A: case 0x12E: - case 0x132: case 0x136: case 0x13A: case 0x13E: - SPRxPTL(hpos, value, (addr - 0x122) / 4); - break; - case 0x140: case 0x148: case 0x150: case 0x158: - case 0x160: case 0x168: case 0x170: case 0x178: - SPRxPOS(hpos, value, (addr - 0x140) / 8); - break; - case 0x142: case 0x14A: case 0x152: case 0x15A: - case 0x162: case 0x16A: case 0x172: case 0x17A: - SPRxCTL(hpos, value, (addr - 0x142) / 8); - break; - case 0x144: case 0x14C: case 0x154: case 0x15C: - case 0x164: case 0x16C: case 0x174: case 0x17C: - SPRxDATA(hpos, value, (addr - 0x144) / 8); - break; - case 0x146: case 0x14E: case 0x156: case 0x15E: - case 0x166: case 0x16E: case 0x176: case 0x17E: - SPRxDATB(hpos, value, (addr - 0x146) / 8); - break; +static void process_dmal(uae_u32 v) +{ + uae_u16 dmalt = audio_dmal(); + dmalt <<= (3 * 2); + dmalt |= disk_dmal(); + dmal = dmalt; +} - case 0x36: JOYTEST(value); break; - case 0x5A: BLTCON0L(hpos, value); break; - case 0x5C: BLTSIZV(hpos, value); break; - case 0x5E: BLTSIZH(hpos, value); break; - case 0x1E4: DIWHIGH(hpos, value); break; -#ifdef AGA - case 0x10C: BPLCON4(hpos, value); break; -#endif +static void start_dmal(void) +{ + dmal_shifter |= 2; +} - case 0x1DC: BEAMCON0(hpos, value); break; - case 0x1C0: - if (htotal != value) { - sync_changes(hpos); - htotal = value & (MAXHPOS_ROWS - 1); - varsync(addr, 1, -1); - } - break; - case 0x1C2: - if (hsstop != value) { - sync_changes(hpos); - hsstop = value & (MAXHPOS_ROWS - 1); - varsync(addr, 1, -1); - } - break; - case 0x1C4: - if (hbstrt != value) { - sync_changes(hpos); - hbstrt = value & 0x7ff; - varsync(addr, 0, -1); - } - break; - case 0x1C6: - if (hbstop != value) { - sync_changes(hpos); - hbstop = value & 0x7ff; - varsync(addr, 0, -1); - } - break; - case 0x1C8: - if (vtotal != value) { - vtotal = value & (MAXVPOS_LINES_ECS - 1); - varsync(addr, 1, -1); - } - break; - case 0x1CA: - if (vsstop != value) { - sync_changes(hpos); - vsstop = value & (MAXVPOS_LINES_ECS - 1); - varsync(addr, 1, -1); - } - break; - case 0x1CC: - if (vbstrt != value) { - sync_changes(hpos); - uae_u16 old = vbstrt; - vbstrt = value & (MAXVPOS_LINES_ECS - 1); - varsync(addr, 0, old); - } - break; - case 0x1CE: - if (vbstop != value) { - sync_changes(hpos); - uae_u16 old = vbstop; - vbstop = value & (MAXVPOS_LINES_ECS - 1); - varsync(addr, 0, old); - } - break; - case 0x1DE: - if (hsstrt != value) { - sync_changes(hpos); - hsstrt = value & (MAXHPOS_ROWS - 1); - varsync(addr, 1, -1); - } - break; - case 0x1E0: - if (vsstrt != value) { - sync_changes(hpos); - vsstrt = value & (MAXVPOS_LINES_ECS - 1); - varsync(addr, 1, -1); +static void shift_dmal(void) +{ + dmal_shifter <<= 1; +} +static void handle_dmal(void) +{ + if (!dmal_shifter) { + return; + } + + if (agnus_hpos & 1) { + if (!custom_disabled && !agnus_vb_active && !agnus_bsvb && (dmal_shifter & (DMAL_SPR0A | DMAL_SPR1A | DMAL_SPR2A | DMAL_SPR3A | DMAL_SPR4A | DMAL_SPR5A | DMAL_SPR6A | DMAL_SPR7A | + DMAL_SPR0B | DMAL_SPR1B | DMAL_SPR2B | DMAL_SPR3B | DMAL_SPR4B | DMAL_SPR5B | DMAL_SPR6B | DMAL_SPR7B))) { + for (int nr = 0; nr < 8; nr++) { + if (dmal_shifter & (DMAL_SPR0A << (nr * 2))) { + generate_sprites(nr, 0); + } + if (dmal_shifter & (DMAL_SPR0A << (nr * 2 + 1))) { + generate_sprites(nr, 2); + } + } } - break; - case 0x1E2: - if (hcenter != value) { - sync_changes(hpos); - hcenter = value & (MAXHPOS_ROWS - 1); - varsync(addr, 0, -1); + } + + if (agnus_hpos & 1) { + return; + } + + if (dmaen(DMA_AUD0 | DMA_AUD1 | DMA_AUD2 | DMA_AUD3) && ((dmal >> (2 * 3)) & 255) && (dmal_shifter & (DMAL_AUD0 | DMAL_AUD1 | DMAL_AUD2 | DMAL_AUD3))) { + for (int nr = 0; nr < 4; nr++) { + if (dmal_shifter & (DMAL_AUD0 << nr)) { + uae_u32 dmalbits = (dmal >> ((3 + nr) * 2)) & 3; + if (dmalbits) { + uaecptr *pt = audio_getpt(nr); //, (dmalbits & 1) != 0); + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_AUDIO, 0xaa + nr * 16, pt); + rga->auddat = dmalbits | (((3 + nr) * 2) << 8); + } + } } - break; + } - case 0x1D0: SPRHSTRT(hpos, value); break; - case 0x1D2: SPRHSTOP(hpos, value); break; - case 0x1D4: BPLHSTRT(hpos, value); break; - case 0x1D6: BPLHSTOP(hpos, value); break; - case 0x1D8: HHPOS(hpos, value); break; + if (dmaen(DMA_DISK) && (((dmal >> 0) & 63) && (dmal_shifter & (DMAL_DSK0 | DMAL_DSK1 | DMAL_DSK2)))) { + for (int nr = 0; nr < 3; nr++) { + if (dmal_shifter & (DMAL_DSK0 << nr)) { + uae_u32 dmalbits = (dmal >> (0 + nr * 2)) & 3; + int w = (dmalbits & 3) == 3; + if (dmalbits) { + uaecptr *pt = disk_getpt(); + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_DISK, w ? 0x26 : 0x08, pt); + rga->dskdat = nr; + } + } + } + } -#ifdef AGA - case 0x1FC: FMODE(hpos, value); break; -#endif - case 0x1FE: FNULL(value); break; + if (dmal_shifter & (DMAL_REFRESH0 | DMAL_REFRESH1 | DMAL_REFRESH2 | DMAL_REFRESH3)) { + if (dmal_shifter & DMAL_REFRESH0) { + uae_u16 reg = get_strobe_reg(0); + refptr &= refmask; + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_STROBE, reg, &refptr); + rga->refdat = 0; + } + if (dmal_shifter & DMAL_REFRESH1) { + uae_u16 reg = get_strobe_reg(1); + refptr &= refmask; + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_REFRESH, reg, &refptr); + rga->refdat = 1; + } + if (dmal_shifter & DMAL_REFRESH2) { + refptr &= refmask; + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_REFRESH, 0x1fe, &refptr); + rga->refdat = 2; + } + if (dmal_shifter & DMAL_REFRESH3) { + refptr &= refmask; + struct rgabuf *rga = write_rga(RGA_SLOT_IN, CYCLE_REFRESH, 0x1fe, &refptr); + rga->refdat = 3; + } + } +} - /* writing to read-only register causes read access */ - default: - if (!noget) { -#if CUSTOM_DEBUG > 0 - write_log(_T("%04X written %08x\n"), addr, M68K_GETPC); -#endif - custom_wget_1(hpos, addr, 1, false); +static void check_vidsyncs(void) +{ + uae_u32 flags = DENISE_RGA_FLAG_SYNC; + if (ecs_denise && !aga_mode) { + flags |= DENISE_RGA_FLAG_BLANKEN_CSYNC; + } + if (ecs_denise && !aga_mode && (beamcon0 & BEAMCON0_BLANKEN)) { + // BLANKEN: programmed VB and HB -> CSYNC + bool on = agnus_phblank || agnus_pvb; + // VARCSYEN: both VARCSY and BLANKEN must be active. + if (beamcon0 & BEAMCON0_VARCSYEN) { + if (!agnus_pcsync) { + on = false; + } else { + flags |= DENISE_RGA_FLAG_CSYNC; + } } - return 1; + flags |= on ? DENISE_RGA_FLAG_BLANKEN_CSYNC_ON : 0; + } else if ((beamcon0 & BEAMCON0_VARCSYEN)) { + // VARCSYEN + bool on = agnus_pcsync; + flags |= on ? (DENISE_RGA_FLAG_BLANKEN_CSYNC_ON | DENISE_RGA_FLAG_CSYNC) : 0; + } else { + bool on = agnus_csync; + flags |= on ? (DENISE_RGA_FLAG_BLANKEN_CSYNC_ON | DENISE_RGA_FLAG_CSYNC) : 0; } - return 0; + if (beamcon0 & BEAMCON0_VARVSYEN) { + flags |= agnus_pvsync ? DENISE_RGA_FLAG_VSYNC : 0; + } else { + flags |= agnus_vsync ? DENISE_RGA_FLAG_VSYNC : 0; + } + if (beamcon0 & BEAMCON0_VARHSYEN) { + flags |= agnus_phsync ? DENISE_RGA_FLAG_HSYNC : 0; + } else { + flags |= agnus_hsync ? DENISE_RGA_FLAG_HSYNC : 0; + } + if (beamcon0 & BEAMCON0_CSYTRUE) { + flags ^= DENISE_RGA_FLAG_CSYNC; + } + if (beamcon0 & BEAMCON0_VSYTRUE) { + flags ^= DENISE_RGA_FLAG_VSYNC; + } + if (beamcon0 & BEAMCON0_HSYTRUE) { + flags ^= DENISE_RGA_FLAG_HSYNC; + } + write_drga_flag(flags, DENISE_RGA_FLAG_SYNC | DENISE_RGA_FLAG_CSYNC | DENISE_RGA_FLAG_VSYNC | DENISE_RGA_FLAG_HSYNC | + DENISE_RGA_FLAG_BLANKEN_CSYNC_ON | DENISE_RGA_FLAG_BLANKEN_CSYNC); } -static void REGPARAM2 custom_wput(uaecptr addr, uae_u32 value) +static void check_vsyncs(void) { - int hpos = current_hpos (); + bool pal = beamcon0_pal; - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { - dummy_put(addr, 2, value); - return; + agnus_bsvb_prev = agnus_bsvb; + agnus_bsvb = false; + + if ((agnusa1000 && vpos == 0) || (!agnusa1000 && vpos == maxvpos + lof_store - 1)) { + agnus_bsvb = true; + agnus_vb = 2; + agnus_vb_start_line = true; + update_agnus_vb(); } -#if CUSTOM_DEBUG > 2 - write_log (_T("%d:%d:wput: %04X %04X pc=%p\n"), hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc ()); + + if (programmed_register_accessed) { + if (vpos == vbstrt) { + agnus_pvb = true; + agnus_pvb_start_line = true; + update_agnus_vb(); + update_lof_detect(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VB, true); + } #endif - sync_copper(hpos); - if (addr & 1) { + } else if (agnus_pvb_start_line) { + agnus_pvb_start_line = false; + update_agnus_vb(); + } + if (vpos == vbstop) { + agnus_pvb = false; + agnus_pvb_end_line = true; + update_agnus_vb(); #ifdef DEBUGGER - debug_invalid_reg(addr, -2, value); + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VB, false); + } #endif - addr &= ~1; - custom_wput_1(hpos, addr, (value >> 8) | (value & 0xff00), 0); - custom_wput_1(hpos, addr + 2, (value << 8) | (value & 0x00ff), 0); - return; + } else if (agnus_pvb_end_line) { + agnus_pvb_end_line = false; + update_agnus_vb(); + } + if (vpos == bplhstop) { + uhres_bpl = false; + } + if (vpos == bplhstrt) { + uhres_bpl = true; + } + if (vpos == sprhstop) { + uhres_spr = false; + } + if (vpos == sprhstrt) { + uhres_spr = true; + } } - custom_wput_1(hpos, addr, value, 0); -} -static void REGPARAM2 custom_bput (uaecptr addr, uae_u32 value) -{ - uae_u16 rval; + if (pal) { - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { - dummy_put(addr, 1, value); - return; - } + if (agnus_bsvb_prev) { + agnus_equzone = true; + } + + // A1000 PAL Agnus has only PAL line count and VB end + // All others use NTSC timings. + if (agnusa1000) { + if (vpos == 9) { + agnus_equzone = false; + } + } else { + if (vpos == 7 && !lof_store) { + agnus_equzone = false; + } + if (vpos == 8 && lof_store) { + agnus_equzone = false; + } + } + + // VB end + if (vpos == 25) { + agnus_vb = 0; + agnus_vb_end_line = true; + update_agnus_vb(); #ifdef DEBUGGER - debug_invalid_reg(addr, -1, value); + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VB, false); + } #endif - if (aga_mode) { - if (addr & 1) { - rval = value & 0xff; - } else { - rval = (value << 8) | (value & 0xff); + } else if (agnus_vb_end_line) { + agnus_vb_end_line = false; + update_agnus_vb(); } - } else { - rval = (value << 8) | (value & 0xff); - } - if (currprefs.cs_bytecustomwritebug) { - if (addr & 1) - custom_wput(addr & ~1, rval | (rval << 8)); - else - custom_wput(addr, value << 8); } else { - custom_wput(addr & ~1, rval); + + if (agnus_bsvb_prev) { + agnus_equzone = true; + } + if (vpos == 9) { + agnus_equzone = false; + } + + // VB end + if (vpos == 20) { + agnus_vb = 0; + agnus_vb_end_line = true; + update_agnus_vb(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VB, false); + } +#endif + } else if (agnus_vb_end_line) { + agnus_vb_end_line = false; + update_agnus_vb(); + } } } -static void REGPARAM2 custom_lput (uaecptr addr, uae_u32 value) +static void do_scandouble(void) { - if ((addr & 0xffff) < 0x8000 && currprefs.cs_fatgaryrev >= 0) { - dummy_put(addr, 4, value); - return; + struct rgabuf rga = { 0 }; + for (int i = 0; i < rga_denise_cycle_count; i++) { + int idx = (i + rga_denise_cycle_start) & (DENISE_RGA_SLOT_TOTAL - 1); + struct denise_rga *rd = &rga_denise[idx]; + if (rd->rga >= 0x110 && rd->rga < 0x120) { + rga.pv = rd->pt + 8; + if (fetchmode_fmode_bpl == 3) { + rd->v64 = fetch64(&rga); + } else if (fetchmode_fmode_bpl > 0) { + rd->v = fetch32(&rga); + } else { + rd->v = fetch16(&rga); + } + } } - custom_wput (addr & 0xfffe, value >> 16); - custom_wput ((addr + 2) & 0xfffe, (uae_u16)value); } -#ifdef SAVESTATE +static int wclks_prev; -void custom_prepare_savestate(void) +static void next_denise_rga(void) { - if (!currprefs.cpu_cycle_exact) { - for (int i = 0; i < ev2_max; i++) { - if (eventtab2[i].active) { - eventtab2[i].active = 0; - eventtab2[i].handler(eventtab2[i].data); - } - } - } + rga_denise_cycle_start_prev = rga_denise_cycle_start; + rga_denise_cycle_start = rga_denise_cycle; + rga_denise_cycle_count = 0; + rga_denise[(rga_denise_cycle - 1) & (DENISE_RGA_SLOT_TOTAL - 1)].line++; + rga_denise[(rga_denise_cycle - 2) & (DENISE_RGA_SLOT_TOTAL - 1)].line++; + rga_denise[(rga_denise_cycle - 3) & (DENISE_RGA_SLOT_TOTAL - 1)].line++; + rga_denise[(rga_denise_cycle - 4) & (DENISE_RGA_SLOT_TOTAL - 1)].line++; + rga_denise[(rga_denise_cycle - 5) & (DENISE_RGA_SLOT_TOTAL - 1)].line++; + rga_denise[rga_denise_cycle].line++; + rga_denise_cycle_line++; } -void restore_custom_finish(void) +static void decide_line_end(void) { - if ((bplcon0 & 2) && !currprefs.genlock) { - changed_prefs.genlock = currprefs.genlock = 1; - write_log(_T("statefile with BPLCON0 ERSY set without Genlock. Enabling Genlock.\n")); + linear_hpos_prev[2] = linear_hpos_prev[1]; + linear_hpos_prev[1] = linear_hpos_prev[0]; + linear_hpos_prev[0] = linear_hpos; + linear_hpos = 0; + hautoscale_check(); + display_hstart_cyclewait_cnt = display_hstart_cyclewait; + if (currprefs.display_calibration) { + display_hstart_cyclewait_cnt = 4; } + display_hstart_cyclewait_start = false; } -void restore_custom_start(void) +static void draw_line(int hpos) { - memset(&cop_state, 0, sizeof(cop_state)); - cop_state.state = COP_stop; -} + hdisplay_left_border = (get_cck_cycles() - agnus_trigger_cck) - REFRESH_FIRST_HPOS; + int dvp = calculate_linetype(linear_display_vpos); -#define RB restore_u8() -#define SRB (uae_s8)restore_u8() -#define RBB restore_u8() != 0 -#define RW restore_u16() -#define RL restore_u32() + int wclks = hpos - display_hstart_cyclewait - display_hstart_cyclewait_end; + if (wclks > hpos) { + wclks = hpos; + } -uae_u8 *restore_custom(uae_u8 *src) -{ - uae_u16 dsklen, dskbytr; - int dskpt; - int i; + int maxv = maxvpos_display + maxvpos_display_vsync - vsync_startline + lof_store; + if (!programmedmode && (linear_display_vpos >= maxv || linear_display_vpos + 1 < minfirstline - vsync_startline)) { + wclks = -1; + } - audio_reset(); + int cs = 0;// (beamcon0 & BEAMCON0_VARHSYEN) ? agnus_phsync_end - agnus_phsync_start : agnus_hsync_end - agnus_hsync_start; + int cslen = 10; + draw_denise_line(dvp, nextline_how, rga_denise_cycle_line, rga_denise_cycle_start, rga_denise_cycle_count, wclks, cs, cslen); + wclks_prev = wclks; +} - changed_prefs.chipset_mask = currprefs.chipset_mask = RL & CSMASK_MASK; - update_mirrors(); - blt_info.bltddat = RW; /* 000 BLTDDAT */ - RW; /* 002 DMACONR */ - RW; /* 004 VPOSR */ - RW; /* 006 VHPOSR */ - RW; /* 008 DSKDATR (dummy register) */ - JOYSET(0, RW); /* 00A JOY0DAT */ - JOYSET(1, RW); /* 00C JOY1DAT */ - clxdat = RW; /* 00E CLXDAT */ - RW; /* 010 ADKCONR */ - RW; /* 012 POT0DAT* */ - RW; /* 014 POT1DAT* */ - RW; /* 016 POTINP* */ - RW; /* 018 SERDATR* */ - dskbytr = RW; /* 01A DSKBYTR */ - RW; /* 01C INTENAR */ - RW; /* 01E INTREQR */ - dskpt = RL; /* 020-022 DSKPT */ - dsklen = RW; /* 024 DSKLEN */ - RW; /* 026 DSKDAT */ - refptr = RW; /* 028 REFPTR */ - i = RW; lof_store = lof_display = (i & 0x8000) ? 1 : 0; lol = (i & 0x0080) ? 1 : 0; /* 02A VPOSW */ - RW; /* 02C VHPOSW */ - COPCON(RW); /* 02E COPCON */ - RW; /* 030 SERDAT* */ -#ifdef SERIAL_PORT - serper = RW; /* 032 SERPER* */ -#else - RW; /* 032 SERPER* */ -#endif - potgo_value = 0; POTGO(RW); /* 034 POTGO */ - RW; /* 036 JOYTEST* */ - RW; /* 038 STREQU */ - RW; /* 03A STRVHBL */ - RW; /* 03C STRHOR */ - RW; /* 03E STRLONG */ - BLTCON0(0, RW); /* 040 BLTCON0 */ - BLTCON1(0, RW); /* 042 BLTCON1 */ - BLTAFWM(0, RW); /* 044 BLTAFWM */ - BLTALWM(0, RW); /* 046 BLTALWM */ - BLTCPTH(0, RW);BLTCPTL(0, RW); /* 048-04B BLTCPT */ - BLTBPTH(0, RW);BLTBPTL(0, RW); /* 04C-04F BLTBPT */ - BLTAPTH(0, RW);BLTAPTL(0, RW); /* 050-053 BLTAPT */ - BLTDPTH(0, RW);BLTDPTL(0, RW); /* 054-057 BLTDPT */ - RW; /* 058 BLTSIZE */ - RW; /* 05A BLTCON0L */ - blt_info.vblitsize = RW;/* 05C BLTSIZV */ - blt_info.hblitsize = RW;/* 05E BLTSIZH */ - BLTCMOD(0, RW); /* 060 BLTCMOD */ - BLTBMOD(0, RW); /* 062 BLTBMOD */ - BLTAMOD(0, RW); /* 064 BLTAMOD */ - BLTDMOD(0, RW); /* 066 BLTDMOD */ - RW; /* 068 ? */ - RW; /* 06A ? */ - RW; /* 06C ? */ - RW; /* 06E ? */ - BLTCDAT(0, RW); /* 070 BLTCDAT */ - BLTBDAT(0, RW); /* 072 BLTBDAT */ - BLTADAT(0, RW); /* 074 BLTADAT */ - RW; /* 076 ? */ - RW; /* 078 ? */ - RW; /* 07A ? */ - RW; /* 07C LISAID */ - DSKSYNC(-1, RW); /* 07E DSKSYNC */ - cop1lc = RL; /* 080/082 COP1LC */ - cop2lc = RL; /* 084/086 COP2LC */ - RW; /* 088 ? */ - RW; /* 08A ? */ - RW; /* 08C ? */ - diwstrt = RW; /* 08E DIWSTRT */ - diwstop = RW; /* 090 DIWSTOP */ - ddfstrt = RW; /* 092 DDFSTRT */ - ddfstop = RW; /* 094 DDFSTOP */ - dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */ - CLXCON(-1, RW); /* 098 CLXCON */ - intena = RW; /* 09A INTENA */ - intreq = RW; /* 09C INTREQ */ - adkcon = RW; /* 09E ADKCON */ - for (i = 0; i < 8; i++) - bplptx[i] = bplpt[i] = RL; - bplcon0 = RW; /* 100 BPLCON0 */ - bplcon1 = RW; /* 102 BPLCON1 */ - bplcon2 = RW; /* 104 BPLCON2 */ - bplcon3 = RW; /* 106 BPLCON3 */ - bpl1mod = RW; /* 108 BPL1MOD */ - bpl2mod = RW; /* 10A BPL2MOD */ - bplcon4 = RW; /* 10C BPLCON4 */ - clxcon2 = RW; /* 10E CLXCON2* */ - for (i = 0; i < 8; i++) { - fetched[i] = RW; /* BPLXDAT */ - fetched_aga[i] = fetched[i]; - } - for (i = 0; i < 32; i++) { - uae_u16 v = RW; - color_regs_genlock[i] = (v & 0x8000) != 0; - current_colors.color_regs_ecs[i] = v & 0xfff; /* 180 COLORxx */ +static void dmal_fast(void) +{ + process_dmal(0); + for (int nr = 0; nr < 4; nr++) { + uae_u32 dmalbits = (dmal >> ((3 + nr) * 2)) & 3; + if (dmalbits) { + struct rgabuf r = { 0 }; + r.p = audio_getpt(nr); + r.pv = *r.p; + dmal_emu_audio(&r, nr); + r.pv += 2; + if (dmalbits & 1) { + r.pv = audio_getloadpt(nr); + } + *r.p = r.pv; + } } - htotal = RW; /* 1C0 HTOTAL */ - hsstop = RW; /* 1C2 HSTOP ? */ - hbstrt = RW; /* 1C4 HBSTRT ? */ - hbstop = RW; /* 1C6 HBSTOP ? */ - vtotal = RW; /* 1C8 VTOTAL */ - vsstop = RW; /* 1CA VSSTOP */ - vbstrt = RW; /* 1CC VBSTRT */ - vbstop = RW; /* 1CE VBSTOP */ - SPRHSTRT(-1, RW); /* 1D0 SPRHSTART */ - SPRHSTOP(-1, RW); /* 1D2 SPRHSTOP */ - BPLHSTRT(-1, RW); /* 1D4 BPLHSTRT */ - BPLHSTOP(-1, RW); /* 1D6 BPLHSTOP */ - hhpos = RW; /* 1D8 HHPOSW */ - RW; /* 1DA HHPOSR */ - new_beamcon0 = RW; /* 1DC BEAMCON0 */ - hsstrt = RW; /* 1DE HSSTRT */ - vsstrt = RW; /* 1E0 VSSTT */ - hcenter = RW; /* 1E2 HCENTER */ - diwhigh = RW; /* 1E4 DIWHIGH */ - diwhigh_written = (diwhigh & 0x8000) ? 1 : 0; - hdiwstate = (diwhigh & 0x4000) ? diw_states::DIW_waiting_stop : diw_states::DIW_waiting_start; - vdiwstate = (diwhigh & 0x0080) ? diw_states::DIW_waiting_start : diw_states::DIW_waiting_stop; - diwhigh &= 0x3f3f; - RW; /* 1E6 ? */ - RW; /* 1E8 ? */ - RW; /* 1EA ? */ - RW; /* 1EC ? */ - RW; /* 1EE ? */ - RW; /* 1F0 ? */ - RW; /* 1F2 ? */ - RW; /* 1F4 ? */ - RW; /* 1F6 ? */ - RW; /* 1F8 ? */ - i = RW; /* 1FA ? */ - if (i & 0x8000) { - currprefs.ntscmode = changed_prefs.ntscmode = i & 1; + for (int nr = 0; nr < 3; nr++) { + uae_u32 dmalbits = (dmal >> (0 + nr * 2)) & 3; + int w = (dmalbits & 3) == 3; + if (dmalbits) { + struct rgabuf r = { 0 }; + r.p = disk_getpt(); + r.pv = *r.p; + dmal_emu_disk(&r, nr, w); + r.pv += 2; + *r.p = r.pv; + } } - fmode = RW; /* 1FC FMODE */ - last_custom_value = RW; /* 1FE ? */ - refptr = RL; /* full refresh pointer */ +} - bplcon0_saved = bplcon0; - bplcon1_saved = bplcon1; - bplcon2_saved = bplcon2; - bplcon3_saved = bplcon3; - bplcon4_saved = bplcon4; - fmode_saved = fmode; - beamcon0_saved = new_beamcon0; - bplcon0d = bplcon0; - bplcon0d_old = 0; - bitplane_dma_change(dmacon); - vdiw_change(vdiwstate == diw_states::DIW_waiting_stop); +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; - intreq2 = intreq; - intena2 = intena; + 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(&r); + r.pv += 4; + fs->data[1] = fetch32(&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; - current_colors.extra = 0; - if (isbrdblank(-1, bplcon0, bplcon3)) { - current_colors.extra |= 1 << CE_BORDERBLANK; - } - if (issprbrd(-1, bplcon0, bplcon3)) { - current_colors.extra |= 1 << CE_BORDERSPRITE; + 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; + } + } } - if (ecs_denise && (bplcon0 & 1) && (bplcon3 & 0x10)) { - current_colors.extra |= 1 << CE_BORDERNTRANS; +} + +static void draw_line_fast(void) +{ + int dvp = calculate_linetype(linear_display_vpos); + uae_u8 *bplptp[MAX_PLANES]; + int s = 18 - 3 + display_hstart_cyclewait; + + 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 dstart = s * 4; + int dlen = maxhpos * 4; + draw_denise_line_fast(bplptp, bstart, blen, dvp, nextline_how, dstart, dlen, 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; + } } - setextblank(); +} - lof_prev_lastline = lof_lastline = lof_store != 0; +static int display_hstart_fastmode; - DISK_restore_custom(dskpt, dsklen, dskbytr); +static void decide_hsync(void) +{ + if (display_hstart_cyclewait_start) { + if (display_hstart_cyclewait_cnt > 0) { + display_hstart_cyclewait_cnt--; + } else { + display_hstart_fastmode = agnus_hpos; - return src; -} + if (!custom_disabled) { -#endif /* SAVESTATE */ + if (custom_fastmode >= 0) { + if (doflickerfix_active()) { + draw_line(linear_hpos); + //do_scandouble(); + } else { + draw_line(linear_hpos); + } + } -#if defined SAVESTATE || defined DEBUGGER + next_denise_rga(); -#define SB save_u8 -#define SW save_u16 -#define SL save_u32 + } -uae_u8 *save_custom(size_t *len, uae_u8 *dstptr, int full) + decide_line_end(); + } + } +} + +static void check_extra(void) { - uae_u8 *dstbak, *dst; - int i, dummy; - uae_u32 dskpt; - uae_u16 dsklen, dsksync, dskbytr; - uae_u16 v; + check_bpl_vdiw(); +} - DISK_save_custom(&dskpt, &dsklen, &dsksync, &dskbytr); +static void handle_pipelined_write(void) +{ + if (pipelined_write_addr == 0x1fe) { + return; + } + custom_wput_1(pipelined_write_addr, pipelined_write_value, 1 | 0x8000); + pipelined_write_addr = 0x1fe; +} - if (dstptr) { - dstbak = dst = dstptr; - } else { - dstbak = dst = xmalloc(uae_u8, 8 + 256 * 2); +static int can_fast_custom(void) +{ + if (1 || not_safe_mode) { + return 0; + } + if (currprefs.cpu_memory_cycle_exact) { + return 0; + } + if (copper_enabled_thisline || vpos == 0) { + return 0; + } + if (!display_hstart_fastmode) { + return 0; + } + if (vpos + 1 == maxvpos + lof_store) { + prev_strobe = 0x3c; + return 0; } + if (vpos >= 50 && vpos < 100) + return 1; + return 0; +} - SL(currprefs.chipset_mask); - SW(blt_info.bltddat); /* 000 BLTDDAT */ - SW(dmacon); /* 002 DMACONR */ - SW(VPOSR()); /* 004 VPOSR */ - SW(VHPOSR()); /* 006 VHPOSR */ - SW(0); /* 008 DSKDATR */ - SW(JOYGET(0)); /* 00A JOY0DAT */ - SW(JOYGET(1)); /* 00C JOY1DAT */ - SW(clxdat | 0x8000); /* 00E CLXDAT */ - SW(ADKCONR()); /* 010 ADKCONR */ - SW(POT0DAT()); /* 012 POT0DAT */ - SW(POT1DAT()); /* 014 POT1DAT */ - SW(0); /* 016 POTINP * */ - SW(0); /* 018 SERDATR * */ - SW(dskbytr); /* 01A DSKBYTR */ - SW(INTENAR()); /* 01C INTENAR */ - SW(INTREQR()); /* 01E INTREQR */ - SL(dskpt); /* 020-023 DSKPT */ - SW(dsklen); /* 024 DSKLEN */ - SW(0); /* 026 DSKDAT */ - SW(refptr); /* 028 REFPTR */ - SW((lof_store ? 0x8001 : 0) | (lol ? 0x0080 : 0));/* 02A VPOSW */ - SW(0); /* 02C VHPOSW */ - SW(copcon); /* 02E COPCON */ -#ifdef SERIAL_PORT - SW(serdat); /* 030 SERDAT * */ - SW(serper); /* 032 SERPER * */ -#else - SW(0); /* 030 SERDAT * */ - SW(0); /* 032 SERPER * */ -#endif - SW(potgo_value); /* 034 POTGO */ - SW(0); /* 036 JOYTEST * */ - SW(0); /* 038 STREQU */ - SW(0); /* 03A STRVBL */ - SW(0); /* 03C STRHOR */ - SW(0); /* 03E STRLONG */ - SW(bltcon0); /* 040 BLTCON0 */ - SW(bltcon1); /* 042 BLTCON1 */ - SW(blt_info.bltafwm); /* 044 BLTAFWM */ - SW(blt_info.bltalwm); /* 046 BLTALWM */ - SL(bltcpt); /* 048-04B BLTCPT */ - SL(bltbpt); /* 04C-04F BLTCPT */ - SL(bltapt); /* 050-053 BLTCPT */ - SL(bltdpt); /* 054-057 BLTCPT */ - if (blt_info.vblitsize > 1024 || blt_info.hblitsize > 64) { - v = 0; - } else { - v = (blt_info.vblitsize << 6) | (blt_info.hblitsize & 63); +static void custom_trigger_start(void) +{ + vpos_prev = vpos; + vpos++; + vpos &= 2047; + if (!ecs_agnus) { + vpos &= 511; } - SW(v); /* 058 BLTSIZE */ - SW(bltcon0 & 0xff); /* 05A BLTCON0L (use BLTCON0 instead) */ - SW(blt_info.vblitsize); /* 05C BLTSIZV */ - SW(blt_info.hblitsize); /* 05E BLTSIZH */ - SW(blt_info.bltcmod); /* 060 BLTCMOD */ - SW(blt_info.bltbmod); /* 062 BLTBMOD */ - SW(blt_info.bltamod); /* 064 BLTAMOD */ - SW(blt_info.bltdmod); /* 066 BLTDMOD */ - SW(0); /* 068 ? */ - SW(0); /* 06A ? */ - SW(0); /* 06C ? */ - SW(0); /* 06E ? */ - SW(blt_info.bltcdat); /* 070 BLTCDAT */ - SW(blt_info.bltbdat); /* 072 BLTBDAT */ - SW(blt_info.bltadat); /* 074 BLTADAT */ - SW(0); /* 076 ? */ - SW(0); /* 078 ? */ - SW(0); /* 07A ? */ - SW(DENISEID(&dummy)); /* 07C DENISEID/LISAID */ - SW(dsksync); /* 07E DSKSYNC */ - SL(cop1lc); /* 080-083 COP1LC */ - SL(cop2lc); /* 084-087 COP2LC */ - SW(0); /* 088 ? */ - SW(0); /* 08A ? */ - SW(0); /* 08C ? */ - SW(diwstrt); /* 08E DIWSTRT */ - SW(diwstop); /* 090 DIWSTOP */ - SW(ddfstrt); /* 092 DDFSTRT */ - SW(ddfstop); /* 094 DDFSTOP */ - SW(dmacon); /* 096 DMACON */ - SW(clxcon); /* 098 CLXCON */ - SW(intena); /* 09A INTENA */ - SW(intreq); /* 09C INTREQ */ - SW(adkcon); /* 09E ADKCON */ - for (i = 0; full && i < 32; i++) - SW(0); - for (i = 0; i < 8; i++) - SL(bplpt[i]); /* 0E0-0FE BPLxPT */ - SW(bplcon0); /* 100 BPLCON0 */ - SW(bplcon1); /* 102 BPLCON1 */ - SW(bplcon2); /* 104 BPLCON2 */ - SW(bplcon3); /* 106 BPLCON3 */ - SW(bpl1mod); /* 108 BPL1MOD */ - SW(bpl2mod); /* 10A BPL2MOD */ - SW(bplcon4); /* 10C BPLCON4 */ - SW(clxcon2); /* 10E CLXCON2 */ - for (i = 0;i < 8; i++) - SW (fetched[i]); /* 110 BPLxDAT */ - if (full) { - for (i = 0; i < 8; i++) { - SL (spr[i].pt); /* 120-13E SPRxPT */ + linear_display_vpos = linear_vpos; + linear_vpos++; + + linear_vpos_vsync++; + if (beamcon0_has_vsync) { + if (vpos == vsstrt) { + linear_vpos_vsync = 0; } - for (i = 0; i < 8; i++) { - struct sprite *s = &spr[i]; - SW(s->pos); /* 1x0 SPRxPOS */ - SW(s->ctl); /* 1x2 SPRxPOS */ - SW(s->data[0]); /* 1x4 SPRxDATA */ - SW(s->datb[0]); /* 1x6 SPRxDATB */ + } else { + if (beamcon0_pal && (vpos == 3 && lof_store) || (vpos == 2 && !lof_store)) { + linear_vpos_vsync = 0; } - } - for (i = 0; i < 32; i++) { - if (aga_mode) { - uae_u32 v = current_colors.color_regs_aga[i]; - uae_u16 v2; - v &= 0x00f0f0f0; - v2 = (v >> 4) & 15; - v2 |= ((v >> 12) & 15) << 4; - v2 |= ((v >> 20) & 15) << 8; - SW(v2); - } else { - uae_u16 v = current_colors.color_regs_ecs[i]; - if (color_regs_genlock[i]) - v |= 0x8000; - SW(v); /* 180-1BE COLORxx */ + if (!beamcon0_pal && vpos == 3) { + linear_vpos_vsync = 0; } } - SW(htotal); /* 1C0 HTOTAL */ - SW(hsstop); /* 1C2 HSTOP*/ - SW(hbstrt); /* 1C4 HBSTRT */ - SW(hbstop); /* 1C6 HBSTOP */ - SW(vtotal); /* 1C8 VTOTAL */ - SW(vsstop); /* 1CA VSSTOP */ - SW(vbstrt); /* 1CC VBSTRT */ - SW(vbstop); /* 1CE VBSTOP */ - SW(sprhstrt); /* 1D0 SPRHSTRT */ - SW(sprhstop); /* 1D2 SPRHSTOP */ - SW(bplhstrt); /* 1D4 BPLHSTRT */ - SW(bplhstop); /* 1D6 BPLHSTOP */ - SW(hhpos); /* 1D8 HHPOSW */ - SW(HHPOSR()); /* 1DA HHPOSR */ - SW(new_beamcon0); /* 1DC BEAMCON0 */ - SW(hsstrt); /* 1DE HSSTRT */ - SW(vsstrt); /* 1E0 VSSTRT */ - SW(hcenter); /* 1E2 HCENTER */ - SW(diwhigh | (diwhigh_written ? 0x8000 : 0) | (hdiwstate == diw_states::DIW_waiting_stop ? 0x4000 : 0) | (vdiwstate == diw_states::DIW_waiting_start ? 0x0080 : 0)); /* 1E4 DIWHIGH */ - SW(0); /* 1E6 */ - SW(0); /* 1E8 */ - SW(0); /* 1EA */ - SW(0); /* 1EC */ - SW(0); /* 1EE */ - SW(0); /* 1F0 */ - SW(0); /* 1F2 */ - SW(0); /* 1F4 */ - SW(0); /* 1F6 */ - SW(0); /* 1F8 */ - SW(0x8000 | (currprefs.ntscmode ? 1 : 0)); /* 1FA (re-used for NTSC) */ - SW(fmode); /* 1FC FMODE */ - SW(last_custom_value); /* 1FE */ - SL(refptr); - *len = dst - dstbak; - return dstbak; -} + if (vpos == vsync_startline) { -#endif /* SAVESTATE || DEBUGGER */ + end_draw_denise(); -#ifdef SAVESTATE + linear_vpos_prev[2] = linear_vpos_prev[1]; + linear_vpos_prev[1] = linear_vpos_prev[0]; + linear_vpos_prev[0] = linear_vpos; + linear_vpos = 0; -uae_u8 *restore_custom_agacolors(uae_u8 *src) -{ - int i; + if (!custom_disabled) { + start_draw_denise(); + } + } - for (i = 0; i < 256; i++) { -#ifdef AGA - uae_u32 v = RL; - color_regs_genlock[i] = 0; - if (v & 0x80000000) { - color_regs_genlock[i] = 1; + bool vposzero = false; + if (vpos == maxvpos + lof_store) { + vpos = 0; + check_vsyncs(); + + hsync_handler(true); + vsync_handler_post(); + + vsync_counter++; + COPJMP(1, 1); + + if (bplcon0 & 4) { + lof_store = lof_store ? 0 : 1; } - v &= 0xffffff; - current_colors.color_regs_aga[i] = v | (color_regs_genlock[i] ? COLOR_CHANGE_GENLOCK : 0); -#else - RL; -#endif + if ((bplcon0 & 2) && currprefs.genlock) { + genlockvtoggle = lof_store ? 1 : 0; + } + + vposzero = true; + + } else if (agnus_vb_start_line) { + + agnus_vb_start_line = false; + update_agnus_vb(); } - return src; -} -uae_u8 *save_custom_agacolors(size_t *len, uae_u8 *dstptr) -{ - uae_u8 *dstbak, *dst; + if (!vposzero) { + if (vpos == 0) { + + hsync_handler(true); + vsync_handler_post(); + + vsync_counter++; + + } else { + + check_vsyncs(); + + hsync_handler(false); - if (!aga_mode) { - int i; - for (i = 0; i < 256; i++) { - if (current_colors.color_regs_aga[i] || color_regs_genlock[i]) - break; } - if (i == 256) - return NULL; } - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc (uae_u8, 256 * 4); - for (int i = 0; i < 256; i++) -#ifdef AGA - SL ((current_colors.color_regs_aga[i] & 0xffffff) | (color_regs_genlock[i] ? 0x80000000 : 0)); -#else - SL (0); -#endif - *len = dst - dstbak; - return dstbak; -} + if (!(new_beamcon0 & BEAMCON0_PAL) && !(new_beamcon0 & BEAMCON0_LOLDIS)) { + lol = lol ? false : true; + linetoggle = true; + } else { + lol = false; + linetoggle = false; + } -uae_u8 *restore_custom_sprite(int num, uae_u8 *src) -{ - struct sprite *s = &spr[num]; - memset (s, 0, sizeof (struct sprite)); - s->pt = RL; /* 120-13E SPRxPT */ - s->pos = RW; /* 1x0 SPRxPOS */ - s->ctl = RW; /* 1x2 SPRxPOS */ - s->data[0] = RW; /* 1x4 SPRxDATA */ - s->datb[0] = RW; /* 1x6 SPRxDATB */ - s->data[1] = RW; - s->datb[1] = RW; - s->data[2] = RW; - s->datb[2] = RW; - s->data[3] = RW; - s->datb[3] = RW; - s->armed = RB & 1; - return src; + setmaxhpos(); + agnus_trigger_cck = get_cck_cycles(); + + start_dmal(); + + if (custom_fastmode < 0) { + custom_fastmode++; + } + if (1 && can_fast_custom() && !custom_fastmode) { + custom_fastmode = 1; + eventtab[ev_sync].oldcycles = get_cycles(); + eventtab[ev_sync].evtime = get_cycles() + (display_hstart_fastmode - 1) * CYCLE_UNIT; + eventtab[ev_sync].active = true; + events_schedule(); + } +// if (1 && !can_fast_custom() && custom_fastmode) { +// custom_fastmode = 0; +// } } -uae_u8 *save_custom_sprite(int num, size_t *len, uae_u8 *dstptr) +void custom_trigger_start_fast(void) { - uae_u8 *dstbak, *dst; - struct sprite *s = &spr[num]; + check_extra(); + custom_trigger_start(); - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc(uae_u8, 30); - SL(s->pt); /* 120-13E SPRxPT */ - SW(s->pos); /* 1x0 SPRxPOS */ - SW(s->ctl); /* 1x2 SPRxPOS */ - SW(s->data[0]); /* 1x4 SPRxDATA */ - SW(s->datb[0]); /* 1x6 SPRxDATB */ - SW(s->data[1]); - SW(s->datb[1]); - SW(s->data[2]); - SW(s->datb[2]); - SW(s->data[3]); - SW(s->datb[3]); - SB(s->armed ? 1 : 0); - *len = dst - dstbak; - return dstbak; + dmal_fast(); + process_sprites_fast(); + draw_line_fast(); + decide_line_end(); + + dmacon_bpl = dmaen(DMA_BITPLANE); + dmacon_next = dmacon; + handle_pipelined_write(); + handle_pipelined_custom_write(true); } -uae_u8 *restore_custom_extra(uae_u8 *src) -{ - uae_u32 v = restore_u32(); - uae_u8 tmp = 0; - if (!(v & 1)) - v = 0; - currprefs.cs_compatible = changed_prefs.cs_compatible = v >> 24; - cia_set_overlay((v & 2) != 0); +static int fast_next_cck; - currprefs.genlock = changed_prefs.genlock = RBB; - currprefs.cs_rtc = changed_prefs.cs_rtc = RB; - RL; // currprefs.cs_rtc_adjust = changed_prefs.cs_rtc_adjust = RL; +static void sync_evhandler(void) +{ + eventtab[ev_sync].active = false; - currprefs.cs_a1000ram = changed_prefs.cs_a1000ram = RBB; + // slow -> fast + if (custom_fastmode == 1) { - //currprefs.a2091rom.enabled = changed_prefs.a2091rom.enabled = RBB; - //currprefs.a4091rom.enabled = changed_prefs.a4091rom.enabled = RBB; - tmp = RBB; - tmp = RBB; - tmp = RBB; + int diff = ((uae_u32)(eventtab[ev_sync].evtime - eventtab[ev_sync].oldcycles)) / CYCLE_UNIT; - currprefs.cs_pcmcia = changed_prefs.cs_pcmcia = RBB; - currprefs.cs_ciaatod = changed_prefs.cs_ciaatod = RB; - currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay = RBB; + agnus_hpos += diff; + linear_hpos += diff + 1; + currcycle_cck += diff; - tmp = RBB; - tmp = RBB; + display_hstart_cyclewait_start = true; + display_hstart_cyclewait_cnt = 0; + // draw previous line normally + decide_hsync(); + // draw this line immediately and early + linear_vpos++; + linear_display_vpos++; + process_sprites_fast(); + draw_line_fast(); + custom_fastmode = 2; - currprefs.cs_agnusrev = changed_prefs.cs_agnusrev = SRB; - currprefs.cs_deniserev = changed_prefs.cs_deniserev = SRB; - currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev = SRB; - currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev = SRB; + // current HPOS to next line's HPOS=1 + eventtab[ev_sync].evtime = get_cycles() + (maxhpos - agnus_hpos + 1) * CYCLE_UNIT; + eventtab[ev_sync].active = true; + events_schedule(); + return; - currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p = RBB; - currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = RBB; - currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram = RBB; - currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd = RBB; - currprefs.cs_cdtvram = changed_prefs.cs_cdtvram = RBB; - RB; + } - currprefs.cs_df0idhw = changed_prefs.cs_df0idhw = RBB; - tmp = RBB; - currprefs.cs_ide = changed_prefs.cs_ide = RB; - currprefs.cs_mbdmac = changed_prefs.cs_mbdmac = RB; - currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8 = RBB; - currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0 = RBB; - currprefs.cs_resetwarning = changed_prefs.cs_resetwarning = RBB; - currprefs.cs_z3autoconfig = changed_prefs.cs_z3autoconfig = RBB; - currprefs.cs_1mchipjumper = changed_prefs.cs_1mchipjumper = RBB; - currprefs.cs_bytecustomwritebug = changed_prefs.cs_bytecustomwritebug = RBB; - currprefs.cs_color_burst = changed_prefs.cs_color_burst = RBB; - currprefs.cs_toshibagary = changed_prefs.cs_toshibagary = RBB; - currprefs.cs_romisslow = changed_prefs.cs_romisslow = RBB; + // fast -> fast (HPOS=1) + if (custom_fastmode == 2) { + currcycle_cck += maxhpos; + linear_hpos = maxhpos; + agnus_hpos = 1; - currprefs.cs_ciatype[0] = changed_prefs.cs_ciatype[0] = RBB; - currprefs.cs_ciatype[1] = changed_prefs.cs_ciatype[1] = RBB; + // check if next line would need copper + if (!copper_enabled_thisline && vpos < maxvpos + lof_store - 1) { + vpos++; + compute_spcflag_copper(); + vpos--; + } - currprefs.cs_memorypatternfill = changed_prefs.cs_memorypatternfill = RBB; + if (!can_fast_custom()) { + linear_vpos--; + linear_display_vpos--; + custom_fastmode = -2; + agnus_hpos = 1; + } else { + custom_trigger_start_fast(); + // HPOS=1 to HPOS=1 + eventtab[ev_sync].evtime = get_cycles() + maxhpos * CYCLE_UNIT; + eventtab[ev_sync].active = true; + events_schedule(); + } + return; + } +} - currprefs.cs_agnusmodel = changed_prefs.cs_agnusmodel = RBB; - currprefs.cs_agnussize = changed_prefs.cs_agnussize = RBB; - currprefs.cs_denisemodel = changed_prefs.cs_denisemodel = RBB; - return src; +static bool cck_clock; + +static void get_cck_clock(void) +{ + int h = agnus_hpos + 1; + if (h == maxhpos) { + h = 0; + } + if (agnus_pos_change == 1 && agnus_hpos_next >= 0) { + h = agnus_hpos_next; + } + cck_clock = (h & 1) != (agnus_hpos & 1); } -uae_u8 *save_custom_extra(size_t *len, uae_u8 *dstptr) +static void inc_cck(void) { - uae_u8 *dstbak, *dst; +#ifdef DEBUGGER + if (debug_dma) { + struct dma_rec *dr = record_dma_next_cycle(agnus_hpos, vpos, linear_vpos_vsync); + rga_denise[rga_denise_cycle].dr = dr; + if (dr) { + dr->cs = (beamcon0 & BEAMCON0_VARCSYEN) ? agnus_pcsync : agnus_csync; + dr->hs = (beamcon0 & BEAMCON0_VARHSYEN) ? agnus_phsync : agnus_hsync; + dr->vs = (beamcon0 & BEAMCON0_VARVSYEN) ? agnus_pvsync : agnus_vsync; + } + } +#endif - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc(uae_u8, 1000); + agnus_hpos_prev = agnus_hpos; + agnus_hpos++; + hhpos++; + linear_hpos++; + currcycle_cck++; - SL((currprefs.cs_compatible << 24) | (get_mem_bank_real(0) != &chipmem_bank ? 2 : 0) | 1); - SB(currprefs.genlock ? 1 : 0); - SB(currprefs.cs_rtc); - SL(currprefs.cs_rtc_adjust); + // must check end of line first + if (agnus_hpos == maxhpos) { + agnus_hpos = 0; + } + if (beamcon0_dual) { + if (hhpos == maxhpos) { + hhpos = 0; + } + } else { + hhpos = agnus_hpos; + } - SB(currprefs.cs_a1000ram ? 1 : 0); + // before VPOSW write modifications + // (write $xxE3 to VPOSW won't match end of line) + if (agnus_pos_change > -2) { + agnus_pos_change--; + if (agnus_pos_change == 0) { + if (agnus_hpos_next >= 0) { + if (agnus_hpos_next) { + int hnewglitch = agnus_hpos_next & ~1; + decide_bpl(hnewglitch); + } + agnus_hpos = agnus_hpos_next; + agnus_hpos_next = -1; + } + if (agnus_vpos_next >= 0) { + vpos = agnus_vpos_next; + agnus_vpos_next = -1; + check_vsyncs(); + } + compute_spcflag_copper(); + } + } - SB(is_board_enabled(&currprefs, ROMTYPE_A2091, 0) ? 1 : 0); - SB(is_board_enabled(&currprefs, ROMTYPE_A4091, 0) ? 1 : 0); - SB(0); + rga_denise_cycle++; + rga_denise_cycle &= (DENISE_RGA_SLOT_TOTAL - 1); + rga_denise_cycle_count++; +} - SB(currprefs.cs_pcmcia ? 1 : 0); - SB(currprefs.cs_ciaatod); - SB(currprefs.cs_ciaoverlay ? 1 : 0); +static void update_agnus_pcsync(int hp, bool prevsy) +{ + bool pcsync = agnus_pcsync; - SB(agnusa1000 ? 1 : 0); - SB(denisea1000_noehb ? 1 : 0); + bool enable1 = false; + if ((prevsy && hp == hbstop_cck) || + (prevsy && hp == hbstrt_cck) || + (!prevsy && hp == hsstop)) { + enable1 = true; + } + bool enable2 = true; + if ((prevsy && hp == hcenter) || (hp == hsstrt) || (agnus_pcsync)) { + enable2 = false; + } + agnus_pcsync = !enable1 && !enable2; + if (pcsync != agnus_pcsync) { + if (agnus_pcsync) { + agnus_phsync_start = get_cck_cycles(); + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_CS, agnus_pcsync); + } +#endif + } +} - SB(currprefs.cs_agnusrev); - SB(currprefs.cs_deniserev); - SB(currprefs.cs_fatgaryrev); - SB(currprefs.cs_ramseyrev); +static void check_hsyncs(void) +{ + bool pal = beamcon0_pal; + bool realpal = pal && !agnusa1000; + int hp = agnus_hpos; + int hhp = beamcon0_dual ? hhpos : agnus_hpos; - SB(currprefs.cs_cd32c2p); - SB(currprefs.cs_cd32cd); - SB(currprefs.cs_cd32nvram); - SB(currprefs.cs_cdtvcd ? 1 : 0); - SB(currprefs.cs_cdtvram ? 1 : 0); - SB(0); + bool is_hsstrt = hp == 18; + bool is_hsstop = hp == 35; + bool is_shs = hp == 18; + bool is_rhs = hp == 35; + bool is_cen = hp == 132; + bool is_vr1 = hp == 9; + bool is_vr2 = hp == 115; + bool is_ver1 = (realpal ? hp == 26 : hp == 27); + bool is_ver2 = (realpal ? hp == 140 : hp == 141); + bool is_rsvs = (lof_store && is_shs) || is_cen; + bool is_rsve_n = (lof_store && is_vr1) || is_vr2; + bool is_rsve_p = (lof_store && is_vr2); - SB(currprefs.cs_df0idhw ? 1 : 0); - SB(agnusa1000 ? 1 : 0); - SB(currprefs.cs_ide); - SB(currprefs.cs_mbdmac); - SB(currprefs.cs_ksmirror_a8 ? 1 : 0); - SB(currprefs.cs_ksmirror_e0 ? 1 : 0); - SB(currprefs.cs_resetwarning ? 1 : 0); - SB(currprefs.cs_z3autoconfig ? 1 : 0); - SB(currprefs.cs_1mchipjumper ? 1 : 0); + if (is_hsstrt) { // HSSTRT + agnus_hsync = true; + agnus_hsync_start = get_cck_cycles(); + check_vidsyncs(); + if (!beamcon0_has_hsync) { + display_hstart_cyclewait_start = true; + write_drga_flag(DENISE_RGA_FLAG_LOL | (lol ? DENISE_RGA_FLAG_LOL_ON : 0), DENISE_RGA_FLAG_LOL | DENISE_RGA_FLAG_LOL_ON); + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_HS, true); + } +#endif + } + if (is_hsstop) { // HSSTOP + agnus_hsync = false; + agnus_hsync_end = get_cck_cycles(); + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_HS, false); + } +#endif + } - SB(currprefs.cs_bytecustomwritebug ? 1 : 0); - SB(currprefs.cs_color_burst ? 1 : 0); - SB(currprefs.cs_toshibagary ? 1 : 0); - SB(currprefs.cs_romisslow ? 1 : 0); + if (realpal) { - SB(currprefs.cs_ciatype[0]); - SB(currprefs.cs_ciatype[1]); + // Vertival SYNC + if (is_shs) { // SHS + if (vpos == 3 && lof_store) { + agnus_vsync = true; + lof_detect = 1; + update_lof_detect(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, true); + } +#endif + } + if (vpos == 5 && !lof_store) { + agnus_vsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, false); + } +#endif + } + check_vidsyncs(); + } + if (is_cen) { // HCENTER + if (vpos == 2 && !lof_store) { + agnus_vsync = true; + lof_detect = 0; + update_lof_detect(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, true); + } +#endif + } + if (vpos == 5 && lof_store) { + agnus_vsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, false); + } +#endif + } + check_vidsyncs(); + } - SB(currprefs.cs_memorypatternfill); + } else { - SB(currprefs.cs_agnusmodel); - SB(currprefs.cs_agnussize); - SB(currprefs.cs_denisemodel); + // Vertival SYNC + if (is_shs) { // SHS + if (vpos == 3 && lof_store) { + agnus_vsync = true; + lof_detect = 1; + update_lof_detect(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, true); + } +#endif + } + if (vpos == 6 && lof_store) { + agnus_vsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, false); + } +#endif + } + check_vidsyncs(); + } + if (is_cen) { // HCENTER + if (vpos == 3 && !lof_store) { + agnus_vsync = true; + lof_detect = 0; + update_lof_detect(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, true); + } +#endif + } + if (vpos == 6 && !lof_store) { + agnus_vsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VS, false); + } +#endif + } + check_vidsyncs(); + } + } - *len = dst - dstbak; - return dstbak; -} + if (1) { + bool is_ve = agnus_ve; + bool is_hc1 = hp == 1; + bool is_vsy = agnus_vsync; + + // CSYNC + if (agnus_csync && (is_hc1 || is_vr2 || (is_rhs && !is_vsy) || (is_ver2 && !is_vsy) || (is_ver1 && !is_vsy && is_ve))) { + agnus_csync = false; + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_CS, false); + } +#endif + } else if (!agnus_csync && ((is_cen && is_ve) || is_shs)) { + agnus_csync = true; + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_CS, true); + } +#endif + } -uae_u8 *save_custom_slots(size_t *len, uae_u8 *dstptr) -{ - uae_u8 *dstbak, *dst; + // P_VE + if (ecs_agnus) { + if (agnus_bsvb) { + agnus_p_ve = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_P_VE, true); + } +#endif + } + if ((vpos == 9 && is_rsve_n) || (vpos == 8 && is_vr1) || (vpos == 7 && is_rsve_p) || agnus_equdis) { + agnus_p_ve = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_P_VE, false); + } +#endif + } + } + // VE + if (vpos == 0 && is_rsve_n) { + agnus_ve = true; + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_VE, true); + } +#endif + } + if ((vpos == 9 && is_rsve_n) || (vpos == 8 && is_vr1) || (vpos == 7 && is_rsve_p) || agnus_equdis) { + agnus_ve = false; + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_VE, false); + } +#endif + } + } - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc(uae_u8, 1000); + if (programmed_register_accessed) { + bool prevsy = agnus_pvsync; - uae_u32 v = 1; - // copper final MOVE pending? - if (cop_state.state == COP_read1) { - v |= 2; - } else if (cop_state.state == COP_read2) { - v |= 4; + if (hhp == hsstrt) { + agnus_phsync = true; + if (!lof_store && vpos == vsstrt) { + agnus_pvsync = true; + lof_pdetect = 0; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VS, true); + } +#endif + } + if (!lof_store && vpos == vsstop) { + agnus_pvsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VS, false); + } +#endif + } + if (beamcon0_has_hsync) { + display_hstart_cyclewait_start = true; + if (hsstrt > 8) { + // LOL info must be send after STRLONG cycyle + write_drga_flag(DENISE_RGA_FLAG_LOL | (lol ? DENISE_RGA_FLAG_LOL_ON : 0), DENISE_RGA_FLAG_LOL | DENISE_RGA_FLAG_LOL_ON); + } + } + update_agnus_pcsync(hhp, prevsy); + update_agnus_vb(); + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_HS, true); + } +#endif + } + if (hhp == hsstop) { + agnus_phsync = false; + update_agnus_pcsync(hhp, prevsy); + agnus_phsync_end = get_cck_cycles(); + check_vidsyncs(); + if (beamcon0_has_hsync && hsstrt <= 8) { + // LOL info must be send after STRLONG cycyle + write_drga_flag(DENISE_RGA_FLAG_LOL | (lol ? DENISE_RGA_FLAG_LOL_ON : 0), DENISE_RGA_FLAG_LOL | DENISE_RGA_FLAG_LOL_ON); + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_HS, false); + } +#endif + } + if (hhp == hbstrt_cck) { + agnus_phblank = true; + agnus_phblank_start = get_cck_cycles(); + update_agnus_pcsync(hhp, prevsy); + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HB, true); + } +#endif + } + if (hhp == hbstop_cck) { + agnus_phblank = false; + agnus_phblank_end = get_cck_cycles(); + update_agnus_pcsync(hhp, prevsy); + check_vidsyncs(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HB, false); + } +#endif + } + if (hhp == hcenter) { + if (lof_store && vpos == vsstrt) { + agnus_pvsync = true; + lof_pdetect = 1; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VS, true); + } +#endif + } + if (lof_store && vpos == vsstop) { + agnus_pvsync = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_PRG_VS, false); + } +#endif + } + update_agnus_pcsync(hhp, prevsy); + check_vidsyncs(); + } } - save_u32(v); - save_u32(cop_state.ip); - save_u16(cop_state.ir[0]); - save_u16(cop_state.ir[1]); - for (int i = 0; i < 4; i++) { - save_u16(cycle_line_pipe[i]); - save_u16(cycle_line_slot[i]); + if (agnus_vb > 1) { + agnus_vb--; + update_agnus_vb(); +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_agnus(AGNUS_EVENT_HW_VB, true); + } +#endif } - - *len = dst - dstbak; - return dstbak; } -uae_u8 *restore_custom_slots(uae_u8 *src) -{ - uae_u32 v = restore_u32(); - if (!(v & 1)) - return src; +extern void process_blitter(struct rgabuf*); - cop_state.ip = restore_u32(); - cop_state.ir[0] = restore_u16(); - cop_state.ir[1] = restore_u16(); - cop_state.state = COP_stop; - if (v & 2) { - cop_state.state = COP_read1; - } else if (v & 4) { - cop_state.state = COP_read2; +static void handle_rga_out(void) +{ + if (dmal_next) { + dmal_next = false; + process_dmal(0); } - for (int i = 0; i < 4; i++) { - cycle_line_pipe[i] = restore_u16(); - cycle_line_slot[i] = (uae_u8)restore_u16(); - } + if (check_rga_out()) { + int hp = agnus_hpos; + struct rgabuf *r = read_rga_out(); + bool done = false; + bool disinc = false; - return src; -} + last_rga_cycle = get_cycles(); -uae_u8 *restore_custom_event_delay(uae_u8 *src) -{ - if (restore_u32() != 1) - return src; - int cnt = restore_u8(); - for (int i = 0; i < cnt; i++) { - uae_u8 type = restore_u8(); - evt_t e = restore_u64(); - uae_u32 data = restore_u32(); - evfunc2 f = NULL; - switch(type) + if (r->type & (CYCLE_REFRESH | CYCLE_STROBE)) { + *r->p += ref_ras_add; + *r->p &= refmask; + refptr = *r->p; + disinc = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, *r->p, DMARECORD_REFRESH, (hp - 3) / 2); + record_dma_read_value(0xffff); + int num = r->refdat; + if (num == 1 && lof_store) { + record_dma_event(DMA_EVENT_LOF); + } + if (num == 1 && lol) { + record_dma_event(DMA_EVENT_LOL); + } + } +#endif + done = true; + } + + switch (r->reg) { - case 1: - f = event_send_interrupt_do_ext; - break; - case 2: - f = event_doint_delay_do_ext; - break; - case 3: - f = event_audxdat_func; - break; - case 4: - f = event_setdsr; - break; - case 5: - f = event_CIA_synced_interrupt; - break; - case 6: - f = event_doint_delay_do_intreq; - break; - case 7: - f = event_doint_delay_do_intena; - break; - case 8: - f = event_CIA_tod_inc_event; - break; - case 9: - f = event_DISK_handler; - break; - case 10: - f = bitplane_dma_change; - break; - case 0: - write_log("ignored event type %d (%08x) restored\n", type, data); - break; - default: - write_log("unknown event type %d (%08x) restored\n", type, data); - break; + // STROBES + case 0x38: + case 0x3a: + case 0x3c: + { + // VERTB = STRHOR -> !STRHOR + if (prev_strobe == 0x3c && r->reg != 0x3c) { + INTREQ_INT(5, 0); + } + prev_strobe = r->reg; + if (!custom_disabled) { + write_drga(r->reg, NULL, 0); + } + // load DMAL in next cycle + dmal_next = true; + done = true; + } + break; + case 0x03e: // STRLONG + if (!custom_disabled) { + write_drga(r->reg, NULL, 0); + } + done = true; + break; } - if (f) { - event2_newevent_xx(-1, e, data, f); + + if (r->type & CYCLE_COPPER) { + process_copper(r); + done = true; } - } - return src; -} -uae_u8 *save_custom_event_delay(size_t *len, uae_u8 *dstptr) -{ - uae_u8 *dstbak, *dst; - int cnt = 0, cnt2 = 0; - for (int i = ev2_misc; i < ev2_max; i++) { - struct ev2 *e = &eventtab2[i]; - if (e->active) { - cnt++; + // SPR + if (r->reg >= 0x140 && r->reg < 0x180) { + int num = r->sprdat & 7; + bool slot = (r->sprdat & 8) != 0; + bool dmastate = (r->sprdat & 0x10) != 0; + struct sprite *s = &spr[num]; + uae_u16 sdat = 0; + uaecptr pt = s->pt; + +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, *r->p, DMARECORD_SPRITE, num); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(*r->p, MW_MASK_SPR_0 + num, r->reg); + } +#endif + if (fetchmode_fmode_spr == 0) { + uae_u16 dat = fetch16(r); + if (!dmastate) { + write_drga(r->reg, pt, dat); + } else { + write_drga(r->reg, pt, dat << 16); + } + sdat = dat; + } else if (fetchmode_fmode_spr == 1) { + uae_u32 dat = fetch32(r); + sdat = dat >> 16; + if (!dmastate) { + write_drga(r->reg, pt, sdat); + } else { + write_drga(r->reg, pt, dat); + } + } else { + uae_u64 dat = fetch64(r); + sdat = dat >> 48; + if (!dmastate) { + write_drga(r->reg, pt, sdat); + } else { + write_drga_wide(r->reg, pt, dat); + } + } + + if (!dmastate) { + if (slot) { + SPRxCTL_DMA(sdat, num); + } else { + SPRxPOS(sdat, num); + } + } + if (!disinc) { + r->pv += sprite_width / 8; + } + regs.chipset_latch_rw = sdat; + s->pt = r->pv; + done = true; + } else if (r->type & CYCLE_SPRITE) { + int num = r->sprdat & 7; + struct sprite *s = &spr[num]; + *r->p += sprite_width / 8; + s->pt = *r->p; } - } - if (cnt == 0) - return NULL; - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc(uae_u8, 1000); + // BPL + if (r->reg >= 0x110 && r->reg < 0x120) { - save_u32(1); - save_u8(cnt); - for (int i = ev2_misc; i < ev2_max; i++) { - struct ev2 *e = &eventtab2[i]; - if (e->active) { - evfunc2 f = e->handler; - uae_u8 type = 0; - if (f == event_send_interrupt_do_ext) { - type = 1; - } else if (f == event_doint_delay_do_ext) { - type = 2; - } else if (f == event_audxdat_func) { - type = 3; - } else if (f == event_setdsr) { - type = 4; - } else if (f == event_CIA_synced_interrupt) { - type = 5; - } else if (f == event_doint_delay_do_intreq) { - type = 6; - } else if (f == event_doint_delay_do_intena) { - type = 7; - } else if (f == event_CIA_tod_inc_event) { - type = 8; - } else if (f == event_DISK_handler) { - type = 9; - } else if (f == bitplane_dma_change) { - type = 10; + int num = r->bpldat & 7; + uaecptr pt = r->pv; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, pt, DMARECORD_BITPLANE, num); + if (r->bplmod) { + record_dma_event(DMA_EVENT_MODADD); + } + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(pt, MW_MASK_BPL_0 + num, r->reg); + } +#endif + if (!aga_mode) { + uae_u32 dat = fetch16(r); + write_drga(r->reg, pt, dat); + regs.chipset_latch_rw = (uae_u16)dat; } else { - write_log("unknown event2 handler %p\n", e->handler); - e->active = false; - f(e->data); + if (fetchmode_fmode_bpl == 0) { + uae_u32 dat = fetch16(r); + write_drga(r->reg, pt, dat); + regs.chipset_latch_rw = (uae_u16)dat; + } else if (fetchmode_fmode_bpl == 1) { + uae_u32 dat = fetch32(r); + write_drga(r->reg, pt, dat); + regs.chipset_latch_rw = (uae_u16)dat; + } else { + uae_u64 dat64 = fetch64(r); + write_drga_wide(r->reg, pt, dat64); + regs.chipset_latch_rw = (uae_u16)dat64; + } } - if (type) { - cnt2++; + if (!disinc) { + r->pv += fetchmode_bytes + r->bplmod; } - save_u8(type); - save_u64(e->evtime - get_cycles()); - save_u32(e->data); + bplpt[num] = r->pv; + done = true; + } else if (r->type & CYCLE_BITPLANE) { + int num = r->bpldat & 7; + r->pv += fetchmode_bytes + r->bplmod; + bplpt[num] = r->pv; } - } - write_log("%d pending events saved\n", cnt2); - *len = dst - dstbak; - return dstbak; -} + if (r->type & CYCLE_BLITTER) { + process_blitter(r); + done = true; + } + // AUDIO + if (r->reg == 0xaa || r->reg == 0xba || r->reg == 0xca || r->reg == 0xda) { + int num = (r->reg - 0xaa) / 0x10; + uaecptr pt = r->pv; + dmal_emu_audio(r, num); + if (!disinc) { + pt += 2; + } + if (r->auddat & 1) { + pt = audio_getloadpt(num); + } + *r->p = pt; + r->pv = pt; + done = true; + } -uae_u8 *save_cycles(size_t *len, uae_u8 *dstptr) -{ - uae_u8 *dstbak, *dst; - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc(uae_u8, 1000); - save_u32(1); - save_u32(CYCLE_UNIT); - save_u64(get_cycles()); - save_u32(extra_cycle); - *len = dst - dstbak; - return dstbak; + // DISK + if (r->reg == 0x08 || r->reg == 0x26) { + uaecptr pt = r->pv; + dmal_emu_disk(r, r->dskdat, r->reg == 0x26); + if (!disinc) { + pt += 2; + *r->p = pt; + r->pv = pt; + } + done = true; + } + + // UHRES BPL + if (r->reg == 0x7a) { + uaecptr pt = r->pv; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, pt, DMARECORD_UHRESBPL, 0); + } +#endif + pt += 2 + r->bplmod; + *r->p = pt; + hhbpl = pt; + done = true; + } + // UHRES SPR + if (r->reg == 0x78) { + uaecptr pt = r->pv; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, pt, DMARECORD_UHRESSPR, 0); + } +#endif + pt += 2; + *r->p = pt; + hhspr = pt; + done = true; + } + + if (!done) { + if (r->write) { +#ifdef DEBUGGER + debug_putpeekdma_chipram(*r->p, r->value, r->mwmask, r->reg); +#endif + chipmem_wput_indirect(*r->p, r->value); + } else { +#ifdef DEBUGGER + if (debug_dma) { + record_dma_read(r->reg, *r->p, DMARECORD_REFRESH, 0); + record_dma_read_value(0xffff); + } + if (memwatch_enabled) { + debug_getpeekdma_chipram(*r->p, r->mwmask, r->reg); + } +#endif + } + regs.chipset_latch_rw = r->value; + } + +#ifdef DEBUGGER + if (r->conflict) { + record_dma_event(DMA_EVENT_SPECIAL); + } +#endif + } } -uae_u8 *restore_cycles(uae_u8 *src) +static void generate_dmal(void) { - if (restore_u32() != 1) - return src; - restore_u32(); - start_cycles = restore_u64(); - extra_cycle = restore_u32(); - if (extra_cycle >= 2 * CYCLE_UNIT) - extra_cycle = 0; - set_cycles(start_cycles); - clear_events(); - return src; -} + handle_dmal(); -#endif /* SAVESTATE */ + // even cycles only + if (!(agnus_hpos_prev & 1) && (agnus_hpos & 1)) { + shift_dmal(); + } +} -void check_prefs_changed_custom(void) +static void generate_dma_requests(void) { - bool syncchange = false; + generate_bpl(cck_clock); - if (!config_changed) - return; - currprefs.gfx_framerate = changed_prefs.gfx_framerate; - if (currprefs.turbo_emulation_limit != changed_prefs.turbo_emulation_limit) { - currprefs.turbo_emulation_limit = changed_prefs.turbo_emulation_limit; - if (changed_prefs.turbo_emulation) { - warpmode(changed_prefs.turbo_emulation); - } + if (bplcon0 & 0x0080) { + generate_uhres(); } - if (currprefs.turbo_emulation != changed_prefs.turbo_emulation) - warpmode(changed_prefs.turbo_emulation); - if (inputdevice_config_change_test()) - inputdevice_copyconfig (&changed_prefs, &currprefs); - currprefs.immediate_blits = changed_prefs.immediate_blits; - currprefs.waiting_blits = changed_prefs.waiting_blits; - currprefs.blitter_speed_throttle = changed_prefs.blitter_speed_throttle; - currprefs.collision_level = changed_prefs.collision_level; - if (!currprefs.keyboard_connected && changed_prefs.keyboard_connected) { - // send powerup sync - keyboard_connected(true); - } else if (currprefs.keyboard_connected && !changed_prefs.keyboard_connected) { - keyboard_connected(false); + + if (copper_enabled_thisline) { + generate_copper(); } - currprefs.keyboard_connected = changed_prefs.keyboard_connected; - currprefs.cs_ciaatod = changed_prefs.cs_ciaatod; - currprefs.cs_rtc = changed_prefs.cs_rtc; - currprefs.cs_cd32cd = changed_prefs.cs_cd32cd; - currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p; - currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram; - currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd; - currprefs.cs_ide = changed_prefs.cs_ide; - currprefs.cs_pcmcia = changed_prefs.cs_pcmcia; - currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev; - currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev; - currprefs.cs_agnusrev = changed_prefs.cs_agnusrev; - currprefs.cs_deniserev = changed_prefs.cs_deniserev; - currprefs.cs_mbdmac = changed_prefs.cs_mbdmac; - currprefs.cs_df0idhw = changed_prefs.cs_df0idhw; - currprefs.cs_agnussize = changed_prefs.cs_agnussize; - currprefs.cs_z3autoconfig = changed_prefs.cs_z3autoconfig; - currprefs.cs_bytecustomwritebug = changed_prefs.cs_bytecustomwritebug; - currprefs.cs_color_burst = changed_prefs.cs_color_burst; - currprefs.cs_romisslow = changed_prefs.cs_romisslow; - currprefs.cs_toshibagary = changed_prefs.cs_toshibagary; - currprefs.cs_unmapped_space = changed_prefs.cs_unmapped_space; - currprefs.cs_eclockphase = changed_prefs.cs_eclockphase; - currprefs.cs_eclocksync = changed_prefs.cs_eclocksync; - currprefs.cs_ciatype[0] = changed_prefs.cs_ciatype[0]; - currprefs.cs_ciatype[1] = changed_prefs.cs_ciatype[1]; - currprefs.cs_memorypatternfill = changed_prefs.cs_memorypatternfill; + if (blt_info.blit_queued || blitter_delayed_update) { + extern void generate_blitter(void); + generate_blitter(); + } - if (currprefs.chipset_mask != changed_prefs.chipset_mask || - currprefs.picasso96_nocustom != changed_prefs.picasso96_nocustom || - currprefs.ntscmode != changed_prefs.ntscmode || - currprefs.cs_agnusmodel != changed_prefs.cs_agnusmodel || - currprefs.cs_denisemodel != changed_prefs.cs_denisemodel || - currprefs.cs_hvcsync != changed_prefs.cs_hvcsync - ) { - currprefs.picasso96_nocustom = changed_prefs.picasso96_nocustom; - if (currprefs.ntscmode != changed_prefs.ntscmode) { - currprefs.ntscmode = changed_prefs.ntscmode; - new_beamcon0 = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; - } - if ((changed_prefs.chipset_mask & CSMASK_ECS_AGNUS) && !(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { - new_beamcon0 = beamcon0_saved; - } else if (!(changed_prefs.chipset_mask & CSMASK_ECS_AGNUS) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { - beamcon0_saved = beamcon0; - beamcon0 = new_beamcon0 = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; - diwhigh = 0; - diwhigh_written = 0; - bplcon0 &= ~(0x10 | 0x01); - } - if (currprefs.cs_hvcsync != changed_prefs.cs_hvcsync) { - syncchange = true; - nosignal_trigger = false; - nosignal_status = 0; - } - currprefs.chipset_mask = changed_prefs.chipset_mask; - currprefs.cs_agnusmodel = changed_prefs.cs_agnusmodel; - currprefs.cs_denisemodel = changed_prefs.cs_denisemodel; - currprefs.cs_hvcsync = changed_prefs.cs_hvcsync; - init_custom(); +} + +static void do_cck(bool docycles) +{ + get_cck_clock(); + + bitplane_rga_ptmod(); + + handle_rga_out(); + + generate_dma_requests(); + if (!custom_disabled) { + decide_bpl(agnus_hpos); } - if (currprefs.chipset_hr != changed_prefs.chipset_hr) { - currprefs.chipset_hr = changed_prefs.chipset_hr; - init_custom(); + check_extra(); + + check_hsyncs(); + + if (agnus_hpos == HARDWIRED_DMA_TRIGGER_HPOS) { + custom_trigger_start(); + if (custom_fastmode > 0) { + return; + } } - cia_set_eclockphase(); - if (syncchange) { - varsync_changed = 2; + + decide_hsync(); + empty_pipeline(); + + + inc_cck(); + if (docycles) { + do_cycles_normal(1 * CYCLE_UNIT); } -#ifdef GFXFILTER - for (int i = 0; i < 2; i++) { - int idx = i == 0 ? 0 : 2; - struct gfx_filterdata *fd = &currprefs.gf[idx]; - struct gfx_filterdata *fdcp = &changed_prefs.gf[idx]; + dmacon_bpl = dmaen(DMA_BITPLANE); + dmacon_next = dmacon; - fd->gfx_filter_horiz_zoom = fdcp->gfx_filter_horiz_zoom; - fd->gfx_filter_vert_zoom = fdcp->gfx_filter_vert_zoom; - fd->gfx_filter_horiz_offset = fdcp->gfx_filter_horiz_offset; - fd->gfx_filter_vert_offset = fdcp->gfx_filter_vert_offset; - fd->gfx_filter_scanlines = fdcp->gfx_filter_scanlines; + handle_pipelined_write(); + handle_pipelined_custom_write(false); - fd->gfx_filter_left_border = fdcp->gfx_filter_left_border; - fd->gfx_filter_right_border = fdcp->gfx_filter_right_border; - fd->gfx_filter_top_border = fdcp->gfx_filter_top_border; - fd->gfx_filter_bottom_border = fdcp->gfx_filter_bottom_border; + shift_rga(); + + if (custom_fastmode <= 0) { + generate_dmal(); } -#endif -} -#ifdef CPUEMU_13 +} -STATIC_INLINE void decide_fetch_ce(int hpos) +int do_cycles_cck(int cycles) { - if ((line_cyclebased || blt_info.blitter_dangerous_bpl) && vpos < current_maxvpos()) { - decide_bpl_fetch(hpos); + int c = 0; + while (cycles >= CYCLE_UNIT) { + do_cck(true); + c += CYCLE_UNIT; + cycles -= CYCLE_UNIT; + if (custom_fastmode > 0) { + return c; + } + } + return c; +#if 0 + int c = cycles; + while (c >= CYCLE_UNIT) { + do_cck(); + c -= CYCLE_UNIT; } + if (c > 0) { + evt_t t = get_cycles(); + do_cycles(c); + evt_t t2 = get_cycles(); + if ((t & ~(CYCLE_UNIT - 1)) != (t2 & ~(CYCLE_UNIT - 1))) { + do_cck_noce(); + } + } +#endif } + + + + + + + + + +#ifdef CPUEMU_13 + // 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!) @@ -16606,41 +11406,25 @@ STATIC_INLINE void decide_fetch_ce(int hpos) extern int cpu_tracer; static int dma_cycle(int *mode, int *ipl) { - int hpos_next, hpos_old; - - blt_info.nasty_cnt = 1; - blt_info.wait_nasty = 0; if (cpu_tracer < 0) { return current_hpos_safe(); } if (!currprefs.cpu_memory_cycle_exact) { return current_hpos_safe(); } + blt_info.nasty_cnt = 0; while (currprefs.cpu_memory_cycle_exact) { - hpos_old = current_hpos_safe(); - hpos_next = hpos_old + 1; - decide_line(hpos_next); - sync_copper(hpos_next); - decide_fetch_ce(hpos_next); - int bpldma = bitplane_dma_access(hpos_old, 0); - if (blt_info.blit_queued) { - decide_blitter(hpos_next); - // copper may have been waiting for the blitter - sync_copper(hpos_next); - } - if ((cycle_line_slot[hpos_old] & CYCLE_MASK) == 0 && !bpldma) { - alloc_cycle(hpos_old, CYCLE_CPU); + struct rgabuf *r = read_rga_out(); + if (r->alloc <= 0) { break; } - if (blt_info.nasty_cnt > 0) { - blt_info.nasty_cnt++; - } + blt_info.nasty_cnt++; *ipl = regs.ipl_pin; - do_cycles(1 * CYCLE_UNIT); + do_cck(true); /* bus was allocated to dma channel, wait for next cycle.. */ } blt_info.nasty_cnt = 0; - return hpos_old; + return agnus_hpos; } static void sync_cycles(void) @@ -16653,21 +11437,13 @@ static void sync_cycles(void) int extra = c & (CYCLE_UNIT - 1); if (extra) { extra = CYCLE_UNIT - extra; - do_cycles(extra); + x_do_cycles(extra); } } -void do_copper(void) -{ - sync_cycles(); - int hpos = current_hpos(); - update_copper(hpos); -} - uae_u32 wait_cpu_cycle_read(uaecptr addr, int mode) { - uae_u32 v = 0; - int hpos; + uae_u32 v = 0, vd = 0; int ipl = regs.ipl[0]; evt_t now = get_cycles(); @@ -16675,7 +11451,7 @@ uae_u32 wait_cpu_cycle_read(uaecptr addr, int mode) x_do_cycles_pre(CYCLE_UNIT); - hpos = dma_cycle(&mode, &ipl); + dma_cycle(&mode, &ipl); #ifdef DEBUGGER if (debug_dma) { @@ -16690,39 +11466,44 @@ uae_u32 wait_cpu_cycle_read(uaecptr addr, int mode) } else { reg |= 1; } - record_dma_read(reg, addr, hpos, vpos, DMARECORD_CPU, mode == -2 || mode == 2 ? 0 : 1); + record_dma_read(reg, addr, DMARECORD_CPU, mode == -2 || mode == 2 ? 0 : 1); } peekdma_data.mask = 0; +#else + if (mode == -3) { + v = regs.chipset_latch_rw; + } #endif switch(mode) { case -1: - v = get_long(addr); + v = vd = get_long(addr); break; case -2: - v = get_longi(addr); + v = vd = get_longi(addr); break; case 1: - v = get_word(addr); + v = vd = get_word(addr); break; case 2: - v = get_wordi(addr); + v = vd = get_wordi(addr); break; case 0: - v = get_byte(addr); + v = vd = get_word(addr & ~1); + v >>= (addr & 1) ? 0 : 8; break; } #ifdef DEBUGGER if (debug_dma) { - record_dma_read_value_pos(v, hpos, vpos); + record_dma_read_value_pos(vd); } #endif - regs.chipset_latch_rw = regs.chipset_latch_read = v; + x_do_cycles_post(CYCLE_UNIT, 0); - x_do_cycles_post(CYCLE_UNIT, v); + regs.chipset_latch_rw = regs.chipset_latch_read = v; // if IPL fetch was pending and CPU had wait states // Use ipl_pin value from previous cycle @@ -16735,7 +11516,6 @@ uae_u32 wait_cpu_cycle_read(uaecptr addr, int mode) void wait_cpu_cycle_write(uaecptr addr, int mode, uae_u32 v) { - int hpos; int ipl = regs.ipl[0]; evt_t now = get_cycles(); @@ -16743,7 +11523,7 @@ void wait_cpu_cycle_write(uaecptr addr, int mode, uae_u32 v) x_do_cycles_pre(CYCLE_UNIT); - hpos = dma_cycle(&mode, &ipl); + dma_cycle(&mode, &ipl); #ifdef DEBUGGER if (debug_dma) { @@ -16757,7 +11537,7 @@ void wait_cpu_cycle_write(uaecptr addr, int mode, uae_u32 v) } else { reg |= 1; } - record_dma_write(reg, v, addr, hpos, vpos, DMARECORD_CPU, 1); + record_dma_write(reg, v, addr, DMARECORD_CPU, 1); } peekdma_data.mask = 0; #endif @@ -16772,10 +11552,10 @@ void wait_cpu_cycle_write(uaecptr addr, int mode, uae_u32 v) } } - regs.chipset_latch_rw = regs.chipset_latch_write = v; - x_do_cycles_post(CYCLE_UNIT, v); + regs.chipset_latch_rw = regs.chipset_latch_write = v; + // if IPL fetch was pending and CPU had wait states: // Use ipl_pin value from previous cycle if (now == regs.ipl_evt) { @@ -16787,13 +11567,13 @@ void wait_cpu_cycle_write(uaecptr addr, int mode, uae_u32 v) uae_u32 wait_cpu_cycle_read_ce020(uaecptr addr, int mode) { uae_u32 v = 0; - int hpos, ipl; + int ipl; sync_cycles(); x_do_cycles_pre(CYCLE_UNIT); - hpos = dma_cycle(NULL, &ipl); + dma_cycle(NULL, &ipl); #ifdef DEBUGGER if (debug_dma) { @@ -16805,7 +11585,7 @@ uae_u32 wait_cpu_cycle_read_ce020(uaecptr addr, int mode) } else { reg |= 1; } - record_dma_read(reg, addr, hpos, vpos, DMARECORD_CPU, mode == -2 || mode == 2 ? 0 : 1); + record_dma_read(reg, addr, DMARECORD_CPU, mode == -2 || mode == 2 ? 0 : 1); } peekdma_data.mask = 0; #endif @@ -16830,7 +11610,7 @@ uae_u32 wait_cpu_cycle_read_ce020(uaecptr addr, int mode) #ifdef DEBUGGER if (debug_dma) { - record_dma_read_value_pos(v, hpos, vpos); + record_dma_read_value_pos(v); } #endif @@ -16843,13 +11623,13 @@ uae_u32 wait_cpu_cycle_read_ce020(uaecptr addr, int mode) void wait_cpu_cycle_write_ce020(uaecptr addr, int mode, uae_u32 v) { - int hpos, ipl; + int ipl; sync_cycles(); x_do_cycles_pre(CYCLE_UNIT); - hpos = dma_cycle(NULL, &ipl); + dma_cycle(NULL, &ipl); #ifdef DEBUGGER if (debug_dma) { @@ -16860,7 +11640,7 @@ void wait_cpu_cycle_write_ce020(uaecptr addr, int mode, uae_u32 v) reg |= 2; else reg |= 1; - record_dma_write(reg, v, addr, hpos, vpos, DMARECORD_CPU, 1); + record_dma_write(reg, v, addr, DMARECORD_CPU, 1); } peekdma_data.mask = 0; #endif @@ -16882,14 +11662,7 @@ void do_cycles_ce(int cycles) { cycles += extra_cycle; while (cycles >= CYCLE_UNIT) { - int hpos = current_hpos() + 1; - decide_line(hpos); - sync_copper(hpos); - decide_fetch_ce(hpos); - if (blt_info.blit_queued) { - decide_blitter(hpos); - } - do_cycles(1 * CYCLE_UNIT); + do_cck(true); cycles -= CYCLE_UNIT; } extra_cycle = cycles; @@ -16897,52 +11670,42 @@ void do_cycles_ce(int cycles) void do_cycles_ce020(int cycles) { - int c; evt_t cc; - int extra; + static int extra; + cycles += extra; + extra = 0; if (!cycles) { return; } cc = get_cycles(); - extra = cc & (CYCLE_UNIT - 1); - if (extra) { - extra = CYCLE_UNIT - extra; - if (extra >= cycles) { - do_cycles(cycles); - return; - } - do_cycles(extra); - cycles -= extra; + while (cycles >= CYCLE_UNIT) { + do_cck(true); + cycles -= CYCLE_UNIT; } - c = cycles; - while (c) { - int hpos = current_hpos() + 1; - decide_line(hpos); - sync_copper(hpos); - decide_fetch_ce(hpos); - if (blt_info.blit_queued) { - decide_blitter(hpos); - } - if (c < CYCLE_UNIT) { - break; + extra += cycles; +#if 0 + if (cycles > 0) { + cc = get_cycles(); + evt_t cc2 = cc + cycles; + if ((cc & ~(CYCLE_UNIT - 1)) != (cc2 & ~(CYCLE_UNIT - 1))) { + do_cck(); } - do_cycles(1 * CYCLE_UNIT); - c -= CYCLE_UNIT; - } - if (c) { - do_cycles(c); } +#endif } bool is_cycle_ce(uaecptr addr) { addrbank *ab = get_mem_bank_real(addr); if (!ab || (ab->flags & ABFLAG_CHIPRAM) || ab == &custom_bank) { - int hpos = current_hpos(); - return (cycle_line_slot[hpos] & CYCLE_MASK) != 0; + struct rgabuf *r = read_rga_out(); + if (r->alloc <= 0) { + return false; + } + return true; } - return 0; + return false; } #endif @@ -16968,10 +11731,3 @@ bool ispal(int *lines) } return maxvpos_display >= MAXVPOS_NTSC + (MAXVPOS_PAL - MAXVPOS_NTSC) / 2; } - -static void SET_LINE_CYCLEBASED(int hpos) -{ - line_cyclebased = 1; - decide_line(hpos); - decide_fetch_safe(hpos); -} diff --git a/debug.cpp b/debug.cpp index d0d33fdb..8cdb1298 100644 --- a/debug.cpp +++ b/debug.cpp @@ -68,7 +68,8 @@ int exception_debugging; int no_trace_exceptions; int debug_copper = 0; int debug_dma = 0, debug_heatmap = 0; -int debug_sprite_mask = 0xff; +static uae_u32 debug_sprite_mask_val = 0xff; +uae_u32 debug_sprite_mask = 0xffffffff; int debug_illegal = 0; uae_u64 debug_illegal_mask; static int debug_mmu_mode; @@ -1381,57 +1382,68 @@ struct cop_rec static struct cop_rec *cop_record[2]; static int nr_cop_records[2], curr_cop_set, selected_cop_set; -#define NR_DMA_REC_HPOS 288 -#define NR_DMA_REC_VPOS 1000 -static struct dma_rec *dma_record[2]; -static int dma_record_toggle, dma_record_frame[2]; +#define NR_DMA_REC_LINES_MAX 1000 +#define NR_DMA_REC_COLS_MAX 300 +#define NR_DMA_REC_MAX (NR_DMA_REC_LINES_MAX * NR_DMA_REC_COLS_MAX) +static struct dma_rec *dma_record_data; +static int dma_record_cycle; +static int dma_record_vpos_type; +static struct dma_rec **dma_record_lines; +struct dma_rec *last_dma_rec; -static void record_dma_clear(int r) +struct dma_rec *record_dma_next_cycle(int hpos, int vpos, int vvpos) { - struct dma_rec *dr = dma_record[r]; - for (int v = 0; v < NR_DMA_REC_VPOS; v++) { - for (int h = 0; h < NR_DMA_REC_HPOS; h++) { - struct dma_rec *dr2 = &dr[v * NR_DMA_REC_HPOS + h]; - memset(dr2, 0, sizeof(struct dma_rec)); - dr2->reg = 0xffff; - dr2->hpos = -1; - dr2->cf_reg = 0xffff; - dr2->addr = 0xffffffff; - } + if (!dma_record_data) { + return NULL; } - dma_record_frame[r] = -1; + + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; + struct dma_rec *dro = dr; + dr->hpos = hpos; + dr->vpos[0] = vpos; + dr->vpos[1] = vvpos; + dr->frame = vsync_counter; + dr->tick = currcycle_cck; + dma_record_cycle++; + if (dma_record_cycle >= NR_DMA_REC_MAX) { + dma_record_cycle = 0; + } + if (hpos == 0 && vvpos < NR_DMA_REC_LINES_MAX) { + dma_record_lines[vvpos] = dr; + } + dr = &dma_record_data[dma_record_cycle]; + memset(dr, 0, sizeof(struct dma_rec)); + dr->reg = 0xffff; + dr->cf_reg = 0xffff; + dr->denise_evt[0] = DENISE_EVENT_UNKNOWN; + dr->denise_evt[1] = DENISE_EVENT_UNKNOWN; + dr->agnus_evt = dro->agnus_evt; + dr->hpos = -1; + return dro; } static void dma_record_init(void) { - if (!dma_record[0]) { - dma_record[0] = xcalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS + 2); - dma_record[1] = xcalloc(struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS + 2); - dma_record[0]->vpos = -1; - dma_record[1]->vpos = -1; - dma_record[0]->end = 1; - dma_record[1]->end = 1; - dma_record[0]++; - dma_record[1]++; - record_dma_reset(0); - dma_record_toggle = 0; - dma_record_frame[0] = -1; - dma_record_frame[1] = -1; - record_dma_clear(0); - record_dma_clear(1); + if (!dma_record_data) { + dma_record_data = xcalloc(struct dma_rec, NR_DMA_REC_MAX + 2); + dma_record_lines = xcalloc(struct dma_rec*, NR_DMA_REC_LINES_MAX); + for (int i = 0;i < NR_DMA_REC_MAX; i++) { + struct dma_rec *dr = &dma_record_data[i]; + dr->reg = 0xffff; + dr->cf_reg = 0xffff; + dr->hpos = -1; + } } } void record_dma_reset(int start) { - if (start && !dma_record[0]) { + if (start && !dma_record_data) { dma_record_init(); } - if (!dma_record[0]) { + if (!dma_record_data) { return; } - dma_record_toggle ^= 1; - record_dma_clear(dma_record_toggle); if (start && !debug_dma) { debug_dma = start; } @@ -1548,14 +1560,11 @@ static void set_debug_colors(void) } static int cycles_toggle; -static int record_dma_maxhpos, record_dma_maxvpos; -static int dma_record_hoffset; static void debug_draw_cycles(uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *xredcolors, uae_u32 *xgreencolors, uae_u32 *xbluescolors) { int y, x, xx, dx, xplus, yplus; struct dma_rec *dr; - int t; if (debug_dma >= 4) yplus = 2; @@ -1568,26 +1577,27 @@ static void debug_draw_cycles(uae_u8 *buf, int bpp, int line, int width, int hei else xplus = 1; - t = dma_record_toggle ^ 1; y = line / yplus; if (yplus < 2) y -= 8; if (y < 0) return; - if (y > record_dma_maxvpos) + if (y >= NR_DMA_REC_LINES_MAX) return; if (y >= height) return; - dx = width - xplus * ((record_dma_maxhpos + 1) & ~1) - 16; + dr = dma_record_lines[y]; + if (!dr) + return; + dx = width - xplus * ((maxhpos + 1) & ~1) - 16; bool ended = false; uae_s8 intlev = 0; - for (x = 0; x < record_dma_maxhpos; x++) { + for (x = 0; x < NR_DMA_REC_COLS_MAX; x++) { uae_u32 c = debug_colors[0].l[0]; xx = x * xplus + dx; - dr = &dma_record[t][y * NR_DMA_REC_HPOS + x]; if (dr->end) { ended = true; @@ -1618,6 +1628,11 @@ static void debug_draw_cycles(uae_u8 *buf, int bpp, int line, int width, int hei putpixel(buf, bpp, xx + 4 + 1, c); if (xplus > 2) putpixel(buf, bpp, xx + 4 + 2, c); + + dr++; + if (dr->hpos == 0) { + break; + } } putpixel (buf, bpp, dx + 0, 0); putpixel (buf, bpp, dx + 1, lc(intlevc[intlev])); @@ -1684,7 +1699,7 @@ void debug_draw(uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 * if (heatmap) { debug_draw_heatmap(buf, bpp, line, width, height, xredcolors, xgreencolors, xbluecolors); - } else if (dma_record[0]) { + } else if (dma_record_data) { debug_draw_cycles(buf, bpp, line, width, height, xredcolors, xgreencolors, xbluecolors); } } @@ -1996,178 +2011,93 @@ void debug_mark_refreshed(uaecptr rp) rd->cnt = 0; } -void record_dma_vsync(int vp) +void record_dma_ipl(void) { struct dma_rec *dr; - if (!dma_record[0]) - return; - if (vp >= NR_DMA_REC_VPOS) - return; - - dr = &dma_record[dma_record_toggle][vp * NR_DMA_REC_HPOS]; - dr->end = true; - - record_dma_maxvpos = vp; - dma_record_hoffset = 0; - cycles_toggle = cycles_toggle ? 0 : 1; -} - -void record_dma_reoffset(int vp, int oldhpos, int newhpos) -{ - if (!dma_record[0]) + if (!dma_record_data) return; - - int hp = newhpos + dma_record_hoffset; - struct dma_rec *dr = &dma_record[dma_record_toggle][vp * NR_DMA_REC_HPOS + hp]; - dma_record_hoffset -= newhpos - oldhpos; -#if 0 - dr->vpos = vp; - dr->hpos = oldhpos; -#endif - if (dma_record_hoffset >= NR_DMA_REC_HPOS) { - dma_record_hoffset = NR_DMA_REC_HPOS - 1; - } - if (dma_record_hoffset <= -NR_DMA_REC_HPOS) { - dma_record_hoffset = -NR_DMA_REC_HPOS + 1; - } + dr = &dma_record_data[dma_record_cycle]; + dr->intlev = regs.intmask; + dr->ipl = regs.ipl_pin; + dr->evt |= DMA_EVENT_IPL; } -void record_dma_hsync(int lasthpos) +void record_dma_ipl_sample(void) { struct dma_rec *dr; - if (!dma_record[0]) + if (!dma_record_data) return; + dr = &dma_record_data[dma_record_cycle]; + dr->intlev = regs.intmask; + dr->ipl2 = regs.ipl_pin; + dr->evt |= DMA_EVENT_IPLSAMPLE; +} - lasthpos += dma_record_hoffset; - if (lasthpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) { - dma_record_hoffset = 0; +void record_dma_event_denise(struct dma_rec *dr, int h, uae_u32 evt, bool onoff) +{ + if (!dma_record_data) return; + if (h && !(dr->denise_evt[1] & DENISE_EVENT_COPIED)) { + dr->denise_evt[1] = dr->denise_evt[0] | DENISE_EVENT_COPIED; } - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + lasthpos]; - dr->end = true; - lasthpos -= dma_record_hoffset; - dma_record_hoffset = 0; - - if (vpos == 0) { - record_dma_maxhpos = lasthpos; + if (onoff) { + dr->denise_evt[h] |= evt; + dr->denise_evt_changed[h] |= evt; } else { - if (lasthpos > record_dma_maxhpos) { - record_dma_maxhpos = lasthpos; - } - if (vpos > record_dma_maxvpos) { - record_dma_maxvpos = vpos; - } - } - -#if 0 - refcheck_count++; - if (refcheck_count >= REFRESH_LINES / 8) { - refcheck_count = 0; - check_refreshed(); + dr->denise_evt[h] &= ~evt; + dr->denise_evt_changed[h] |= evt; } -#endif -} - -void record_dma_ipl(int hpos, int vpos) -{ - struct dma_rec *dr; - int hp = hpos; - - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) - return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->hpos = hp; - dr->vpos = vpos; - dr->intlev = regs.intmask; - dr->ipl = regs.ipl_pin; - dr->evt2 |= DMA_EVENT2_IPL; } -void record_dma_ipl_sample(int hpos, int vpos) +void record_dma_event_agnus(uae_u32 evt, bool onoff) { struct dma_rec *dr; - int hp = hpos; - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->hpos = hp; - dr->vpos = vpos; - dr->intlev = regs.intmask; - dr->ipl2 = regs.ipl_pin; - dr->evt2 |= DMA_EVENT2_IPLSAMPLE; + dr = &dma_record_data[dma_record_cycle]; + if (onoff) { + dr->agnus_evt |= evt; + dr->agnus_evt_changed |= evt; + } else { + dr->agnus_evt &= ~evt; + dr->agnus_evt_changed |= evt; + } } -void record_dma_event(uae_u32 evt, int hpos, int vpos) +void record_dma_event(uae_u32 evt) { struct dma_rec *dr; - int hp = hpos; - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->hpos = hp; - dr->vpos = vpos; + dr = &dma_record_data[dma_record_cycle]; dr->evt |= evt; dr->ipl = regs.ipl_pin; } -void record_dma_event2(uae_u32 evt2, int hpos, int vpos) +void record_dma_event_data(uae_u32 evt, uae_u32 data) { struct dma_rec *dr; - int hp = hpos; - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) - return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->hpos = hp; - dr->vpos = vpos; - dr->evt2 |= evt2; - dr->ipl = regs.ipl_pin; -} - -void record_dma_event_data(uae_u32 evt, int hpos, int vpos, uae_u32 data) -{ - struct dma_rec *dr; - int hp = hpos; - - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->hpos = hp; - dr->vpos = vpos; + dr = &dma_record_data[dma_record_cycle]; dr->evt |= evt; dr->evtdata = data; dr->evtdataset = true; dr->ipl = regs.ipl_pin; } -void record_dma_replace(int hpos, int vpos, int type, int extra) +void record_dma_replace(int type, int extra) { struct dma_rec *dr; - if (!dma_record[0]) - return; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; + dr = &dma_record_data[dma_record_cycle]; if (dr->reg == 0xffff) { write_log(_T("DMA record replace without old data!\n")); return; @@ -2182,33 +2112,27 @@ void record_dma_replace(int hpos, int vpos, int type, int extra) static void dma_conflict(int vpos, int hpos, struct dma_rec *dr, int reg, bool write) { write_log(_T("DMA conflict %c: v=%d h=%d OREG=%04X NREG=%04X\n"), write ? 'W' : 'R', vpos, hpos, dr->reg, reg); + //activate_debugger(); } -void record_dma_write(uae_u16 reg, uae_u32 dat, uae_u32 addr, int hpos, int vpos, int type, int extra) +void record_dma_write(uae_u16 reg, uae_u32 dat, uae_u32 addr, int type, int extra) { struct dma_rec *dr; - int hp = hpos; - if (!dma_record[0]) { + if (!dma_record_data) { dma_record_init(); + if (!dma_record_data) + return; } - last_dma_rec = NULL; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) - return; - - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dma_record_frame[dma_record_toggle] = vsync_counter; + dr = &dma_record_data[dma_record_cycle]; if (dr->reg != 0xffff) { dr->cf_reg = reg; dr->cf_dat = dat; dr->cf_addr = addr; - dma_conflict(vpos, hp, dr, reg, false); + dma_conflict(dr->vpos[0], dr->hpos, dr, reg, false); return; } - dr->hpos = hp; - dr->vpos = vpos; dr->reg = reg; dr->dat = dat; dr->addr = addr; @@ -2221,13 +2145,12 @@ void record_dma_write(uae_u16 reg, uae_u32 dat, uae_u32 addr, int hpos, int vpos last_dma_rec = dr; debug_mark_refreshed(dr->addr); } -struct dma_rec *last_dma_rec; -void record_dma_read_value_pos(uae_u32 v, int hpos, int vpos) + +void record_dma_read_value_pos(uae_u32 v) { - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) - return; - struct dma_rec *dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; + if (!dma_record_data) + return; + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; last_dma_rec = dr; record_dma_read_value(v); } @@ -2256,65 +2179,34 @@ void record_dma_read_value_wide(uae_u64 v, bool quad) } } -bool record_dma_check(int hpos, int vpos) +bool record_dma_check(void) { - if (!dma_record[0]) { - return false; - } - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) { + if (!dma_record_data) return false; - } - struct dma_rec *dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; return dr->reg != 0xffff; } -void record_dma_denise(int hpos, int dhpos) -{ - if (!dma_record[0]) { - return; - } - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) { - return; - } - struct dma_rec *dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dr->dhpos = dhpos; -} - -void record_dma_clear(int hpos, int vpos) +void record_dma_clear(void) { - if (!dma_record[0]) { + if (!dma_record_data) return; - } - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) { - return; - } - struct dma_rec *dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; dr->reg = 0xffff; dr->cf_reg = 0xffff; } -void record_cia_access(int r, int mask, uae_u16 value, bool rw, int hpos, int vpos, int phase) +void record_cia_access(int r, int mask, uae_u16 value, bool rw, int phase) { - struct dma_rec *dr; - int hp = hpos; - dma_record_init(); - - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dma_record_frame[dma_record_toggle] = vsync_counter; - + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; if (dr->ciaphase < 0) { return; } - dr->hpos = hp; - dr->vpos = vpos; + dr->ciamask = mask; dr->ciareg = r; dr->ciavalue = value; @@ -2322,30 +2214,22 @@ void record_cia_access(int r, int mask, uae_u16 value, bool rw, int hpos, int vp dr->ciaphase = phase; } -void record_dma_read(uae_u16 reg, uae_u32 addr, int hpos, int vpos, int type, int extra) +void record_dma_read(uae_u16 reg, uae_u32 addr, int type, int extra) { - struct dma_rec *dr; - int hp = hpos; - dma_record_init(); - - last_dma_rec = NULL; - hpos += dma_record_hoffset; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (!dma_record_data) return; - dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; - dma_record_frame[dma_record_toggle] = vsync_counter; + struct dma_rec *dr = &dma_record_data[dma_record_cycle]; + if (dr->reg != 0xffff) { if (dr->reg != reg) { - dma_conflict(vpos, hp, dr, reg, false); + dma_conflict(dr->vpos[0], dr->hpos, dr, reg, false); dr->cf_reg = reg; dr->cf_addr = addr; } return; } - dr->hpos = hp; - dr->vpos = vpos; dr->reg = reg; dr->dat = 0; dr->addr = addr; @@ -2359,7 +2243,7 @@ void record_dma_read(uae_u16 reg, uae_u32 addr, int hpos, int vpos, int type, in debug_mark_refreshed(dr->addr); } -static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR *l1, TCHAR *l2, TCHAR *l3, TCHAR *l4, TCHAR *l5, TCHAR *l6, uae_u32 *split, int *iplp) +static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR *l1, TCHAR *l1b, TCHAR *l1c, TCHAR *l2, TCHAR *l3, TCHAR *l4, TCHAR *l5, TCHAR *l6, uae_u32 *split, int *iplp) { int longsize = dr->size; bool got = false; @@ -2375,6 +2259,10 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * if (l1) l1[0] = 0; + if (l1b) + l1b[0] = 0; + if (l1c) + l1c[0] = 0; if (l2) l2[0] = 0; if (l3) @@ -2387,11 +2275,12 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * l6[0] = 0; int hpos = dr->hpos; - int dhpos = dr->dhpos; + int dhpos0 = dr->dhpos[0]; + int dhpos1 = dr->dhpos[1]; if (hpos < 0) { struct dma_rec *dr2 = dr; int cnt = 0; - while (!dr2->end) { + while (dr2->vpos[dma_record_vpos_type] == dr->vpos[dma_record_vpos_type]) { if (dr2 == drs) { hpos = addrdiff(dr, drs); break; @@ -2419,12 +2308,22 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * sr = _T(" "); if (dr->type == DMARECORD_COPPER) { - if (br == 2) - sr = _T("COPS"); + if (br == 3) + sr = _T("COP-S"); + else if (br == 2) + sr = _T("COP-W"); else if (br == 1) - sr = _T("COPW"); + sr = _T("COP-M"); + else if (br == 4) + sr = _T("COP-X"); + else if (br == 5) + sr = _T("COP-1"); + else if (br == 6) + sr = _T("COP-J"); + else if (br == 7) + sr = _T("COP-D"); else - sr = _T("COP "); + sr = _T("COP "); } else if (dr->type == DMARECORD_BLITTER) { if (dr->extra & 0x20) { if (br == 0) @@ -2471,6 +2370,12 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * } else if (dr->type == DMARECORD_BITPLANE) { sr = _T("BPL"); chcnt = br + 1; + } else if (dr->type == DMARECORD_UHRESBPL) { + sr = _T("UHB"); + chcnt = 0; + } else if (dr->type == DMARECORD_UHRESSPR) { + sr = _T("UHS"); + chcnt = 0; } if (dr->cf_reg != 0xffff) { _stprintf(srtext, _T("!%03x"), dr->cf_reg); @@ -2492,20 +2397,163 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * } } if (ipl >= 0) { - _stprintf(l1, _T("[%02X %03X %d]"), hpos, dhpos, ipl); + _stprintf(l1, _T("[%02X %03X/%03X %d]"), hpos, dhpos0, dhpos1, ipl); } else if (ipl == -2) { - _stprintf(l1, _T("[%02X %03X -]"), hpos, dhpos); + _stprintf(l1, _T("[%02X %03X/%03X -]"), hpos, dhpos0, dhpos1); } else { - _stprintf(l1, _T("[%02X %03X ]"), hpos, dhpos); + _stprintf(l1, _T("[%02X %03X/%03X ]"), hpos, dhpos0, dhpos1); + } + if (l1c) { + TCHAR *p = l1c; + uae_u32 v = dr->agnus_evt; + uae_u32 c = dr->agnus_evt_changed; + if (c & AGNUS_EVENT_VDIW) { + *p++ = 'W'; + } else if (v & AGNUS_EVENT_VDIW) { + *p++ = 'w'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_BPRUN2) { + *p++ = 'D'; + } else if (v & AGNUS_EVENT_BPRUN2) { + *p++ = 'd'; + } else { + if (c & AGNUS_EVENT_BPRUN) { + *p++ = 'B'; + } else if (v & AGNUS_EVENT_BPRUN) { + *p++ = 'b'; + } else { + *p++ = '-'; + } + } + if (c & AGNUS_EVENT_VE) { + *p++ = 'E'; + } else if (v & AGNUS_EVENT_VE) { + *p++ = 'e'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_P_VE) { + *p++ = 'E'; + } else if (v & AGNUS_EVENT_P_VE) { + *p++ = 'e'; + } else { + *p++ = '-'; + } + *p++ = ' '; + if (c & AGNUS_EVENT_HW_HS) { + *p++ = 'H'; + } else if (v & AGNUS_EVENT_HW_HS) { + *p++ = 'h'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_HW_VS) { + *p++ = 'V'; + } else if (v & AGNUS_EVENT_HW_VS) { + *p++ = 'v'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_HW_CS) { + *p++ = 'C'; + } else if (v & AGNUS_EVENT_HW_CS) { + *p++ = 'c'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_PRG_HS) { + *p++ = 'H'; + } else if (v & AGNUS_EVENT_PRG_HS) { + *p++ = 'h'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_PRG_VS) { + *p++ = 'V'; + } else if (v & AGNUS_EVENT_PRG_VS) { + *p++ = 'v'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_PRG_CS) { + *p++ = 'C'; + } else if (v & AGNUS_EVENT_PRG_CS) { + *p++ = 'c'; + } else { + *p++ = '-'; + } + if (c & AGNUS_EVENT_HB) { + *p++ = 'B'; + } else if (v & AGNUS_EVENT_HB) { + *p++ = 'b'; + } else { + *p++ = '-'; + } + *p = 0; + } + if (l1b) { + TCHAR *p = l1b; + for (int h = 0; h < 2; h++) { + uae_u32 v = dr->denise_evt[h]; + uae_u32 c = dr->denise_evt_changed[h]; + if (v & DENISE_EVENT_UNKNOWN) { + *p++ = '?'; + *p++ = '?'; + *p++ = '?'; + *p++ = '?'; + *p++ = '?'; + *p++ = '?'; + } else { + if (c & DENISE_EVENT_HB) { + *p++ = 'H'; + } else if (v & DENISE_EVENT_HB) { + *p++ = 'h'; + } else { + *p++ = '-'; + } + if (c & DENISE_EVENT_VB) { + *p++ = 'V'; + } else if (v & DENISE_EVENT_VB) { + *p++ = 'v'; + } else { + *p++ = '-'; + } + if (c & DENISE_EVENT_BURST) { + *p++ = 'U'; + } else if (v & DENISE_EVENT_BURST) { + *p++ = 'u'; + } else { + *p++ = '-'; + } + if (c & DENISE_EVENT_HDIW) { + *p++ = 'W'; + } else if (v & DENISE_EVENT_HDIW) { + *p++ = 'w'; + } else { + *p++ = '-'; + } + if (c & DENISE_EVENT_BPL1DAT_HDIW) { + *p++ = 'B'; + } else if (v & DENISE_EVENT_BPL1DAT_HDIW) { + *p++ = 'b'; + } else { + *p++ = '-'; + } + } + *p++ = ' '; + } + *p = 0; } if (l4) { - _tcscpy(l4, _T(" ")); + _tcscpy(l4, _T(" ")); } if (l2) { - _tcscpy(l2, _T(" ")); + _tcscpy(l2, _T(" ")); } if (l3) { - _tcscpy(l3, _T(" ")); + _tcscpy(l3, _T(" ")); } if (r != 0xffff) { if (r & 0x1000) { @@ -2576,7 +2624,7 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * l3[cl2++] = 'p'; if (dr->evt & (DMA_EVENT_COPPERWAKE | DMA_EVENT_COPPERSKIP)) l3[cl2++] = 'W'; - if (dr->evt & DMA_EVENT_NOONEGETS) { + if (dr->evt & DMA_EVENT_COPPERWAKE2) { l3[cl2++] = '#'; } else if (dr->evt & DMA_EVENT_COPPERWANTED) { l3[cl2++] = 'c'; @@ -2598,45 +2646,16 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * if (dr->evt & DMA_EVENT_DDFSTOP2) l3[cl2++] = '2'; - if (dr->evt & DMA_EVENT_HDIWS) { - l3[cl2++] = '('; - } - if (dr->evt & DMA_EVENT_HDIWE) { - l3[cl2++] = ')'; - } - - if (dr->evt & DMA_EVENT_HBS) { - l3[cl2++] = '['; - } - if (dr->evt & DMA_EVENT_HBE) { - l3[cl2++] = ']'; - } - if (dr->evt & DMA_EVENT_HSS) { - l3[cl2++] = '{'; - } - if (dr->evt & DMA_EVENT_HSE) { - l3[cl2++] = '}'; - } - - if (dr->evt & (DMA_EVENT_VB | DMA_EVENT_VS | DMA_EVENT_LOL | DMA_EVENT_LOF | DMA_EVENT_VDIW)) { + if (dr->evt & (DMA_EVENT_LOL | DMA_EVENT_LOF)) { l3[cl2++] = '*'; } - if (dr->evt & DMA_EVENT_VS) { - l3[cl2++] = 'S'; - } - if (dr->evt & DMA_EVENT_VB) { - l3[cl2++] = 'B'; - } if (dr->evt & DMA_EVENT_LOL) { l3[cl2++] = 'L'; } if (dr->evt & DMA_EVENT_LOF) { l3[cl2++] = 'F'; } - if (dr->evt & DMA_EVENT_VDIW) { - l3[cl2++] = '='; - } - if (dr->evt & (DMA_EVENT_VB | DMA_EVENT_VS | DMA_EVENT_LOL | DMA_EVENT_LOF | DMA_EVENT_VDIW)) { + if (dr->evt & (DMA_EVENT_LOL | DMA_EVENT_LOF)) { l3[cl2++] = 0; } @@ -2650,12 +2669,15 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * l3[cl2++] = 'B'; } - if (dr->evt2 & DMA_EVENT2_IPLSAMPLE) { + if (dr->evt & DMA_EVENT_IPLSAMPLE) { l3[cl2++] = '^'; } - if (dr->evt2 & DMA_EVENT2_COPPERUSE) { + if (dr->evt & DMA_EVENT_COPPERUSE) { l3[cl2++] = 'C'; } + if (dr->evt & DMA_EVENT_MODADD) { + l3[cl2++] = 'M'; + } } if (l5) { @@ -2675,6 +2697,17 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * } } if (l6) { + TCHAR sync1 = ' ', sync2 = ' '; + if (dr->hs && dr->vs) { + sync1 = 'X'; + } else if (dr->hs) { + sync1 = 'H'; + } else if (dr->vs) { + sync1 = 'V'; + } + if (dr->cs) { + sync2 = 'C'; + } if (dr->addr != 0xffffffff) { int ras, cas; TCHAR xtra = ' '; @@ -2682,9 +2715,9 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * if (ret) { xtra = '+'; } - _stprintf(l6, _T("%c%03X %03X"), xtra, ras, cas); + _stprintf(l6, _T("%c%c%c%03X %03X"), sync1, sync2, xtra, ras, cas); } else { - l6[0] = 0; + _stprintf(l6, _T("%c%c "), sync1, sync2); } } if (extra64) { @@ -2695,69 +2728,173 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR * } +static struct dma_rec *find_dma_record(int hpos, int vpos, int toggle) +{ + int frame = vsync_counter - toggle; + int found = -1; + struct dma_rec *dr = NULL; + + if (!dma_record_data) { + return NULL; + } + for (int i = 0; i < NR_DMA_REC_MAX; i++) { + int idx = dma_record_cycle - i; + if (idx < 0) { + idx += NR_DMA_REC_MAX; + } + dr = &dma_record_data[idx]; + if (found < 0) { + if (dr->frame == frame) { + if ((dr->hpos == 2 || dr->hpos == hpos && hpos >= 2) && dr->vpos[dma_record_vpos_type] == vpos) { + for (;;) { + dr = &dma_record_data[idx]; + int tick = dr->tick; + if (dr->vpos[dma_record_vpos_type] == vpos && dr->frame == frame) { + if (dr->hpos == hpos) { + break; + } + } else { + idx++; + break; + } + idx--; + if (idx < 0) { + idx += NR_DMA_REC_MAX; + } + dr = &dma_record_data[idx]; + if (dr->tick != tick - 1) { + idx++; + break; + } + } + found = idx; + break; + } + } + } + } + if (found >= 0) { + return dr; + } +#if 0 + for (int i = 0; i < NR_DMA_REC_MAX; i++) { + int idx = dma_record_cycle - i; + if (idx < 0) { + idx += NR_DMA_REC_MAX; + } + dr = &dma_record[idx]; + if (found < 0 && dr->hpos >= 0 && dr->vpos[dma_record_vpos_type] == vpos && dr->frame == frame) { + found = idx; + break; + } + } + if (found >= 0) { + int max = maxhpos; + int idx = found; + while (max-- > 0) { + idx--; + if (idx < 0) { + idx += NR_DMA_REC_MAX; + } + dr = &dma_record[idx]; + if (dr->hpos == 1 || dr->hpos <= hpos) { + return dr; + } + } + } +#endif + return NULL; +} static void decode_dma_record(int hpos, int vpos, int count, int toggle, bool logfile) { struct dma_rec *dr, *dr_start; int h, i, maxh = 0; + int zerohpos = 0; + int cols = logfile ? 16 : 8; - if (!dma_record[0] || hpos < 0 || vpos < 0) + if (!dma_record_data || hpos < 0 || vpos < 0) return; - if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) + if (hpos == 0) { + zerohpos = 1; + } + dr_start = find_dma_record(hpos + zerohpos, vpos, toggle); + if (!dr_start) { return; - dr_start = dr = &dma_record[dma_record_toggle ^ toggle][vpos * NR_DMA_REC_HPOS]; + } + dr = dr_start; + dr_start -= zerohpos; if (logfile) - write_dlog (_T("Line: %02X %3d HPOS %02X %3d:\n"), vpos, vpos, hpos, hpos); + write_dlog (_T("Line: %03X/%03X (%3d/%3d) HPOS %02X (%3d):\n"), dr->vpos[0], dr->vpos[1], dr->vpos[0], dr->vpos[1], hpos, hpos); else - console_out_f (_T("Line: %02X %3d HPOS %02X %3d:\n"), vpos, vpos, hpos, hpos); - h = hpos; - while (maxh < NR_DMA_REC_HPOS) { - if (dr->end) + console_out_f (_T("Line: %03X/%03X (%3d/%3d) HPOS %02X (%3d): **********************************************************************************************\n"), + dr->vpos[0], dr->vpos[1], dr->vpos[0], dr->vpos[1], hpos, hpos); + h = 0; + dr = dr_start; + while (maxh < 300) { + if (dr - dma_record_data == dma_record_cycle) { break; - maxh++; + } + if (dr->hpos == 1 && maxh >= 4) { + maxh++; + } dr++; + if (dr == dma_record_data + NR_DMA_REC_MAX) { + dr = dma_record_data; + } + maxh++; } - dr = dr_start + hpos; - if (!logfile && maxh - h > 80) { + dr = dr_start; + if (!logfile && maxh - h > 48) { int maxh2 = maxh; - maxh = h + 80; + maxh = h + 48; if (maxh > maxh2) { maxh = maxh2; } } int ipl = -2; - while (h < maxh) { - int cols = (logfile ? 16 : 8); + zerohpos = 0; + bool quit = false; + while (h < maxh && !quit) { TCHAR l1[400]; + TCHAR l1b[400]; + TCHAR l1c[400]; TCHAR l2[400]; TCHAR l3[400]; TCHAR l4[400]; TCHAR l5[400]; TCHAR l6[400]; l1[0] = 0; + l1b[0] = 0; + l1c[0] = 0; l2[0] = 0; l3[0] = 0; l4[0] = 0; l5[0] = 0; l6[0] = 0; - for (i = 0; i < cols && h < maxh; i++, h++, dr++) { - TCHAR l1l[16], l2l[16], l3l[16], l4l[16], l5l[16], l6l[16]; + + for (i = 0; i < cols; i++, h++, dr++) { + TCHAR l1l[30], l1bl[30], l1cl[30], l2l[30], l3l[30], l4l[30], l5l[30], l6l[30]; uae_u32 split = 0xffffffff; - get_record_dma_info(dr_start, dr, l1l, l2l, l3l, l4l, l5l, l6l, &split, &ipl); + get_record_dma_info(dr_start, dr, l1l, l1bl, l1cl, l2l, l3l, l4l, l5l, l6l, &split, &ipl); TCHAR *p = l1 + _tcslen(l1); - _stprintf(p, _T("%11s "), l1l); + _stprintf(p, _T("%15s "), l1l); + p = l1b + _tcslen(l1b); + _stprintf(p, _T("%15s "), l1bl); + p = l1c + _tcslen(l1c); + _stprintf(p, _T("%15s "), l1cl); p = l2 + _tcslen(l2); - _stprintf(p, _T("%11s "), l2l); + _stprintf(p, _T("%15s "), l2l); p = l3 + _tcslen(l3); - _stprintf(p, _T("%11s "), l3l); + _stprintf(p, _T("%15s "), l3l); p = l4 + _tcslen(l4); - _stprintf(p, _T("%11s "), l4l); + _stprintf(p, _T("%15s "), l4l); p = l5 + _tcslen(l5); - _stprintf(p, _T("%11s "), l5l); + _stprintf(p, _T("%15s "), l5l); p = l6 + _tcslen(l6); - _stprintf(p, _T("%11s "), l6l); + _stprintf(p, _T("%15s "), l6l); if (split != 0xffffffff) { if (split < 0x10000) { @@ -2773,14 +2910,16 @@ static void decode_dma_record(int hpos, int vpos, int count, int toggle, bool lo if (!opcodename) { opcodename = lookup->name; } - TCHAR *ptrs[7]; + TCHAR *ptrs[10]; ptrs[0] = &l1[_tcslen(l1)]; - ptrs[1] = &l2[_tcslen(l2)]; - ptrs[2] = &l3[_tcslen(l3)]; - ptrs[3] = &l4[_tcslen(l4)]; - ptrs[4] = &l5[_tcslen(l5)]; - ptrs[5] = &l6[_tcslen(l6)]; - for (int i = 0; i < 6; i++) { + ptrs[1] = &l1b[_tcslen(l1b)]; + ptrs[2] = &l1c[_tcslen(l1c)]; + ptrs[3] = &l2[_tcslen(l2)]; + ptrs[4] = &l3[_tcslen(l3)]; + ptrs[5] = &l4[_tcslen(l4)]; + ptrs[6] = &l5[_tcslen(l5)]; + ptrs[7] = &l6[_tcslen(l6)]; + for (int i = 0; i < 8; i++) { if (!opcodename[i]) { break; } @@ -2791,9 +2930,18 @@ static void decode_dma_record(int hpos, int vpos, int count, int toggle, bool lo l1[_tcslen(l1) - 1] = '*'; } } + if (dr - dma_record_data == dma_record_cycle) { + quit = true; + break; + } + if (h > 4 && dr->hpos == 1) { + zerohpos = 1; + } } if (logfile) { write_dlog(_T("%s\n"), l1); + write_dlog(_T("%s\n"), l1b); + write_dlog(_T("%s\n"), l1c); write_dlog(_T("%s\n"), l2); write_dlog(_T("%s\n"), l3); write_dlog(_T("%s\n"), l4); @@ -2802,6 +2950,8 @@ static void decode_dma_record(int hpos, int vpos, int count, int toggle, bool lo write_dlog(_T("\n")); } else { console_out_f(_T("%s\n"), l1); + console_out_f(_T("%s\n"), l1b); + console_out_f(_T("%s\n"), l1c); console_out_f(_T("%s\n"), l2); console_out_f(_T("%s\n"), l3); console_out_f(_T("%s\n"), l4); @@ -2809,6 +2959,9 @@ static void decode_dma_record(int hpos, int vpos, int count, int toggle, bool lo console_out_f(_T("%s\n"), l6); console_out_f(_T("\n")); } + if (zerohpos) { + break; + } if (count > 0) { count--; if (!count) { @@ -4180,9 +4333,9 @@ uae_u32 debug_putpeekdma_chipset(uaecptr addr, uae_u32 v, uae_u32 mask, int reg) return v; } -uae_u32 debug_putpeekdma_chipram(uaecptr addr, uae_u32 v, uae_u32 mask, int reg, int ptrreg) +uae_u32 debug_putpeekdma_chipram(uaecptr addr, uae_u32 v, uae_u32 mask, int reg) { - peekdma_save(1, addr, mask, reg, ptrreg); + peekdma_save(1, addr, mask, reg, reg); if (!memwatch_enabled) return v; is_valid_dma(peekdma_data.reg, peekdma_data.ptrreg, peekdma_data.addr); @@ -4194,9 +4347,9 @@ uae_u32 debug_putpeekdma_chipram(uaecptr addr, uae_u32 v, uae_u32 mask, int reg, return v; } -void debug_getpeekdma_chipram(uaecptr addr, uae_u32 mask, int reg, int ptrreg) +void debug_getpeekdma_chipram(uaecptr addr, uae_u32 mask, int reg) { - peekdma_save(2, addr, mask, reg, ptrreg); + peekdma_save(2, addr, mask, reg, reg); } static void debug_putlpeek (uaecptr addr, uae_u32 v) @@ -6455,8 +6608,9 @@ static void ppc_disasm(uaecptr addr, uaecptr *nextpc, int cnt) static void dma_disasm(int frames, int vp, int hp, int frames_end, int vp_end, int hp_end) { - if (!dma_record[0] || frames < 0 || vp < 0 || hp < 0) + if (!dma_record_data || frames < 0 || vp < 0 || hp < 0) return; +#if 0 for (;;) { struct dma_rec *dr = NULL, *drs = NULL; if (dma_record_frame[0] == frames) { @@ -6492,6 +6646,7 @@ static void dma_disasm(int frames, int vp, int hp, int frames_end, int vp_end, i if (vp_end < 0 || hp_end < 0 || frames_end < 0) break; } +#endif } static uaecptr nxdis, nxmem, asmaddr; @@ -6921,9 +7076,16 @@ static bool debug_line (TCHAR *input) console_out_f (_T("Audio mask = %02X\n"), audio_channel_mask); break; case 's': - if (more_params (&inptr)) - debug_sprite_mask = readhex(&inptr, NULL); - console_out_f (_T("Sprite mask: %02X\n"), debug_sprite_mask); + if (more_params (&inptr)) { + debug_sprite_mask_val = readhex(&inptr, NULL); + debug_sprite_mask = 0; + for (int i = 0; i < 8; i++) { + if (debug_sprite_mask_val & (1 << i)) { + debug_sprite_mask |= (3 << (i * 2)) | (1 << (i + 16)); + } + } + } + console_out_f (_T("Sprite mask: %02X\n"), debug_sprite_mask_val); break; case 'b': if (more_params(&inptr)) { @@ -7069,10 +7231,14 @@ static bool debug_line (TCHAR *input) if (more_params(&inptr) && *inptr == '?') { mw_help(); } else { + dma_record_vpos_type = 0; free_heatmap(); int nextcmd = peekchar(&inptr); if (nextcmd == 'l') { next_char(&inptr); + } else if (nextcmd == 'v') { + next_char(&inptr); + dma_record_vpos_type = 1; } if (more_params(&inptr)) v1 = readint(&inptr, NULL); @@ -7332,7 +7498,7 @@ void debug (void) { int wasactive; - if (savestate_state) + if (savestate_state || quit_program) return; bogusframe = 1; diff --git a/devices.cpp b/devices.cpp index dd166408..a157a51d 100644 --- a/devices.cpp +++ b/devices.cpp @@ -198,7 +198,7 @@ void devices_reset(int hardreset) rtarea_reset(); #endif DISK_reset(); - CIA_reset(); + CIA_reset(hardreset); a1000_reset(); #ifdef JIT compemu_reset(); @@ -435,7 +435,6 @@ void devices_restore_start(void) restore_audio_start(); restore_cia_start(); restore_blkdev_start(); - restore_blitter_start(); restore_custom_start(); changed_prefs.bogomem.size = 0; changed_prefs.chipmem.size = 0; diff --git a/disk.cpp b/disk.cpp index 3b8a9b9c..76a3a20c 100644 --- a/disk.cpp +++ b/disk.cpp @@ -5179,11 +5179,11 @@ uae_u16 disk_dmal(void) return dmal; } -uaecptr disk_getpt(void) +uaecptr *disk_getpt(void) { uaecptr pt = dskpt; - dskpt += 2; - return pt & ~1; + dskpt &= ~1; + return &dskpt; } void DSKPTH(uae_u16 v) diff --git a/drawing.cpp b/drawing.cpp index 7c689715..558ae7e6 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -6,31 +6,11 @@ * * Copyright 1995-2000 Bernd Schmidt * Copyright 1995 Alessandro Bissacco -* Copyright 2000-2008 Toni Wilen +* Copyright 2000-2024 Toni Wilen +* +* Complete rewrite 2024 */ -/* There are a couple of concepts of "coordinates" in this file. -- DIW coordinates -- DDF coordinates (essentially cycles, resolution lower than lores by a factor of 2) -- Pixel coordinates -* in the Amiga's resolution as determined by BPLCON0 ("Amiga coordinates") -* in the window resolution as determined by the preferences ("window coordinates"). -* in the window resolution, and with the origin being the topmost left corner of -the window ("native coordinates") -One note about window coordinates. The visible area depends on the width of the -window, and the centering code. The first visible horizontal window coordinate is -often _not_ 0, but the value of VISIBLE_LEFT_BORDER instead. - -One important thing to remember: DIW coordinates are in the lowest possible -resolution. - -To prevent extremely bad things (think pixels cut in half by window borders) from -happening, all ports should restrict window widths to be multiples of 16 pixels. */ - -#define SPRITE_DEBUG_HIDE 0 -#define BG_COLOR_DEBUG 0 -#define EXTBORDER_BLANK 0 - #include "sysconfig.h" #include "sysdeps.h" @@ -59,7 +39,8 @@ happening, all ports should restrict window widths to be multiples of 16 pixels. #include "devices.h" #include "gfxboard.h" -//#define XLINECHECK +#define AUTOSCALE_SPRITES 1 +#define LOL_SHIFT_COLORS 0 struct amigadisplay adisplays[MAX_AMIGADISPLAYS]; @@ -68,51 +49,22 @@ typedef enum CMODE_NORMAL, CMODE_DUALPF, CMODE_EXTRAHB, - CMODE_EXTRAHB_ECS_KILLEHB, - CMODE_HAM + CMODE_HAM, + CMODE_EXTRAHB_ECS_KILLEHB } CMODE_T; +static void select_lts(void); + extern int sprite_buffer_res; static int lores_factor; int lores_shift, shres_shift; - -static void pfield_set_linetoscr(void); +static uae_u32 ham_lastcolor; int debug_bpl_mask = 0xff, debug_bpl_mask_one; -static struct decision *dp_for_drawing; -static struct draw_info *dip_for_drawing; - -static void lores_set(int lores) -{ - int old = lores_shift; - lores_shift = lores; - if (lores_shift != old || shres_shift != RES_MAX - lores) { - shres_shift = RES_MAX - lores; - pfield_set_linetoscr(); - } -} - -static void lores_reset (void) -{ - lores_factor = currprefs.gfx_resolution ? 2 : 1; - lores_set(currprefs.gfx_resolution); - if (doublescan > 0) { - int ls = lores_shift; - if (ls < 2) { - ls++; - } - lores_factor = 2; - lores_set(ls); - } - sprite_buffer_res = currprefs.gfx_resolution; - if (doublescan > 0 && sprite_buffer_res < RES_SUPERHIRES) - sprite_buffer_res++; -} - /* mirror of chipset_mask */ bool ecs_agnus; -bool ecs_denise; +bool ecs_denise, ecs_denise_only; bool aga_mode; bool agnusa1000; bool denisea1000_noehb; @@ -155,24 +107,12 @@ static const int dblpfofs[] = { 0, 2, 4, 8, 16, 32, 64, 128 }; static int sprite_offs[256]; -static uae_u32 clxtab[256]; - /* Video buffer description structure. Filled in by the graphics system * dependent code. */ /* OCS/ECS color lookup table. */ xcolnr xcolors[4096]; -struct spritepixelsbuf { - uae_u8 flags; - uae_u8 stdata; - uae_u16 stfmdata; - uae_u16 data; -}; -static struct spritepixelsbuf spritepixels_buffer[MAX_PIXELS_PER_LINE]; -static struct spritepixelsbuf *spritepixels; -static int sprite_first_x, sprite_last_x; -static bool sprite_visibility; #ifdef AGA /* AGA mode color lookup tables */ @@ -186,69 +126,29 @@ int xredcolor_s, xredcolor_b, xredcolor_m; int xgreencolor_s, xgreencolor_b, xgreencolor_m; int xbluecolor_s, xbluecolor_b, xbluecolor_m; -struct color_entry colors_for_drawing; xcolnr fullblack; -static struct color_entry direct_colors_for_drawing; +static struct color_entry direct_colors_for_drawing_bypass; static xcolnr *p_acolors; static xcolnr *p_xcolors; -/* The size of these arrays is pretty arbitrary; it was chosen to be "more -than enough". The coordinates used for indexing into these arrays are -almost, but not quite, Amiga coordinates (there's a constant offset). */ -static union { - uae_u64 apixels_q[MAX_PIXELS_PER_LINE * 2 / sizeof(uae_u64)]; - uae_u32 apixels_l[MAX_PIXELS_PER_LINE * 2 / sizeof(uae_u32)]; - uae_u8 apixels[MAX_PIXELS_PER_LINE * 2]; -} pixdata; - static uae_u8 *refresh_indicator_buffer; static uae_u8 *refresh_indicator_changed, *refresh_indicator_changed_prev; static int refresh_indicator_height; -#ifdef OS_WITHOUT_MEMORY_MANAGEMENT -uae_u16 *spixels; -#else -uae_u16 spixels[2 * MAX_SPR_PIXELS]; -#endif - -struct sprite_stb spixstate; - -static uae_u32 ham_linebuf[MAX_PIXELS_PER_LINE * 2]; - -static uae_u8 all_ones[MAX_PIXELS_PER_LINE]; -static uae_u8 all_zeros[MAX_PIXELS_PER_LINE]; - -uae_u8 *xlinebuffer, *xlinebuffer_genlock; +uae_u8 *xlinebuffer, *xlinebuffer2; +uae_u16 *xlinebuffer_genlock; static int *amiga2aspect_line_map, *native2amiga_line_map; static int native2amiga_line_map_height; static uae_u8 **row_map; -static uae_u8 *row_map_genlock_buffer; -static uae_u8 row_tmp[MAX_PIXELS_PER_LINE * 32 / 8]; +static uae_u16 *row_map_genlock_buffer; +static uae_u8 row_tmp8[MAX_PIXELS_PER_LINE * 32 / 8]; +static uae_u16 row_tmp16[MAX_PIXELS_PER_LINE * 32 / 8]; static int max_drawn_amiga_line; -uae_u8 **row_map_genlock; +uae_u16 **row_map_genlock; uae_u8 *row_map_color_burst_buffer; -/* line_draw_funcs: pfield_do_linetoscr, pfield_do_fill_line, decode_ham */ -typedef void (*line_draw_func)(int, int, int); - -#define LINE_UNDECIDED 1 -#define LINE_DECIDED 2 -#define LINE_DECIDED_DOUBLE 3 -#define LINE_AS_PREVIOUS 4 -#define LINE_BLACK 5 -#define LINE_REMEMBERED_AS_BLACK 6 -#define LINE_DONE 7 -#define LINE_DONE_AS_PREVIOUS 8 -#define LINE_REMEMBERED_AS_PREVIOUS 9 - -#define LINESTATE_SIZE ((MAXVPOS + MAXVPOS_WRAPLINES) * 2 + 1) - -static uae_u8 linestate[LINESTATE_SIZE]; - -uae_u8 line_data[(MAXVPOS + MAXVPOS_WRAPLINES) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; - /* Centering variables. */ static int min_diwstart, max_diwstop; /* The visible window: VISIBLE_LEFT_BORDER contains the left border of the visible @@ -257,15 +157,8 @@ int visible_left_border, visible_right_border; /* Pixels outside of visible_start and visible_stop are always black */ static int visible_left_start, visible_right_stop; static int visible_top_start, visible_bottom_stop; -/* same for blank */ -static int vblank_top_start, vblank_bottom_stop; -static int hblank_left_start, hblank_right_stop; -static int hblank_left_start_hard, hblank_right_stop_hard; -static bool extborder, exthblanken, exthblankon; +bool exthblanken; static int exthblank; -static bool exthblank_force; -static int exthblank_set; -static bool ehb_enable; static bool syncdebug; static int linetoscr_x_adjust_pixbytes, linetoscr_x_adjust_pixels; @@ -273,6 +166,7 @@ static int thisframe_y_adjust; static int thisframe_y_adjust_real, min_ypos_for_screen; static int max_ypos_thisframe1; int thisframe_first_drawn_line, thisframe_last_drawn_line; +static int drawing_blank_start, drawing_blank_end; /* A frame counter that forces a redraw after at least one skipped frame in interlace mode. */ @@ -284,26 +178,136 @@ static int first_drawn_line, last_drawn_line; /* These are generated by the drawing code from the line_decisions array for each line that needs to be drawn. These are basically extracted out of bit fields in the hardware registers. */ -static int bplmode, bplehb, bplham, bpldualpf, bpldualpfpri; +static int bplmode, bplmode_new; +static bool bplehb_eke, bplham, bplehb, bpldualpf, bpldualpfpri; +static uae_u8 bplehb_mask; static int bpldualpf2of, bplplanecnt, bplmaxplanecnt, ecsshres; static int bplbypass, bplcolorburst, bplcolorburst_field; static int bplres; -static int plf1pri, plf2pri, bplxor, bplxorsp, bpland, bpldelay_sh; +static int plf1pri, plf2pri, bpland; static uae_u32 plf_sprite_mask; -static int sbasecol[2] = { 16, 16 }; -static int hposblank; +static int sbasecol[2], sbasecol2[2]; static bool ecs_genlock_features_active; static uae_u8 ecs_genlock_features_mask; static bool ecs_genlock_features_colorkey; static bool aga_genlock_features_zdclken; -static bool sprite_smaller_than_64, sprite_smaller_than_64_inuse; -static bool full_blank; -static bool hsync_debug, vsync_debug, hblank_debug, vblank_debug; -static int hcenter_debug; -static uae_u8 vb_state; uae_sem_t gui_sem; + + + + +typedef void (*LINETOSRC_FUNC)(void); +static LINETOSRC_FUNC lts; +static bool lts_changed, lts_request; + +static int denise_hcounter, denise_hcounter_next, denise_hcounter_new, denise_hcounter_prev; +static uae_u32 bplxdat[MAX_PLANES], bplxdat2[MAX_PLANES], bplxdat3[MAX_PLANES]; +static uae_u64 bplxdat_64[MAX_PLANES], bplxdat2_64[MAX_PLANES], bplxdat3_64[MAX_PLANES]; +static uae_u16 bplcon0_denise, bplcon1_denise, bplcon2_denise, bplcon3_denise, bplcon4_denise; +static uae_u8 bplcon4_denise_xor_val, bplcon4_denise_sbase, bplcon4_denise_xor_val2; +static int bplcon1_shift[2], bplcon1_shift_full[2], bplcon1_shift_full_masked[2], bplshiftcnt[2]; +static int bplcon1_shift_mask, bplcon1_shift_mask_full; +static int denise_res, denise_res_size; +static uae_u16 denise_diwstrt, denise_diwstop; +static int denise_hstrt, denise_hstop, denise_diwhigh, denise_diwhigh2; +static int denise_brdstrt, denise_brdstop; +static int denise_brdstrt_lores, denise_brdstop_lores; +static bool denise_brdstrt_unalign, denise_brdstop_unalign; +static int denise_hstrt_lores, denise_hstop_lores; +static bool denise_hstrt_unalign, denise_hstop_unalign, denise_phbstrt_unalign, denise_phbstop_unalign; +static int denise_hbstrt_lores, denise_hbstop_lores; +static int denise_strlong_lores, denise_strlong_hd; +static bool denise_strlong_unalign, strlong_emulation; +static int denise_phbstrt, denise_phbstop, denise_phbstrt_lores, denise_phbstop_lores; +static int linear_denise_vbstrt, linear_denise_vbstop; +static int linear_denise_hbstrt, linear_denise_hbstop; +static int denise_visible_lines; +static uae_u16 hbstrt_denise_reg, hbstop_denise_reg; +static uae_u16 fmode_denise, denise_bplfmode, denise_sprfmode; +static bool denise_sprfmode64, denise_bplfmode64; +static int bpldat_fmode; +static int fetchmode_size_denise, fetchmode_mask_denise; +static int delayed_vblank_ecs; +static bool denise_hdiw, denise_hblank, denise_phblank, denise_vblank, denise_pvblank; +static bool denise_blank_active, denise_blank_active2, denise_hblank_active, denise_vblank_active; +static bool debug_special_csync, debug_special_hvsync; +static bool exthblankon_ecs, exthblankon_ecsonly, exthblankon_aga; +static bool denise_csync, denise_vsync, denise_hsync, denise_blank_enabled; +static bool denise_csync_blanken, denise_csync_blanken2; +static bool diwhigh_written; +struct color_entry denise_colors; +static bool bpl1dat_trigger, bpl1dat_copy; +static uae_u32 bordercolor, bordercolor_ecs_shres; +static int sprites_hidden, sprites_hidden2, sprite_hidden_mask; +static bool bordersprite, borderblank, bordertrans; +static bool bpldat_copy[2]; +static int denise_planes, denise_max_planes; +static bool denise_odd_even, denise_max_odd_even; +static int pix_prev; +static int last_bpl_pix; +static int previous_strobe, previous_strobe_flag; +static bool denise_strlong, agnus_lol, extblank; +static int lol; +static int denise_lol_shift_prev, denise_lol_shifted_prev; +static int decode_specials, decode_specials_debug; +static int *dpf_lookup, *dpf_lookup_no; +static int denise_sprres, denise_spr_add, denise_spr_shiftsize; +static int denise_xposmask, denise_xposmask_lores, denise_xposmask_mask_lores; +static uae_u16 clxcon, clxcon2; +static int clxcon_bpl_enable_o, clxcon_bpl_match_o; +static int clxcon_bpl_enable, clxcon_bpl_match; +static uae_u16 clxcon_bpl_enable_55, clxcon_bpl_enable_aa; +static uae_u16 clxcon_bpl_match_55, clxcon_bpl_match_aa; +static int aga_delayed_color_idx; +static uae_u16 aga_delayed_color_val, aga_delayed_color_con2, aga_delayed_color_con3; +static int aga_unalign0, aga_unalign1, bpl1dat_unalign, reswitch_unalign; +static uae_u8 loaded_pix, loaded_pixs[4]; +static int hresolution, hresolution_add; +static bool denise_sprite_blank_active; +static int delayed_sprite_vblank_ecs; +static bool denise_burst; +static int *debug_dma_dhpos_odd; +static struct dma_rec *debug_dma_ptr; +static int denise_cycle_half; +static uae_u32 dtbuf[2][4]; +static uae_u16 dtgbuf[2][4]; + +struct denise_spr +{ + int num; + uae_u16 pos, ctl; + uae_u32 dataa, datab; + uae_u64 dataa64, datab64; + int xpos, xpos_lores; + int armed, armeds; + uae_u32 dataas, databs; + uae_u64 dataas64, databs64; + bool attached; + bool shiftercopydone; + int fmode; + int shift; + int pix; +}; +static struct denise_spr dspr[MAX_SPRITES]; +static struct denise_spr *dprspt[MAX_SPRITES + 1], *dprspts[MAX_SPRITES + 1]; +static int denise_spr_nr_armed, denise_spr_nr_armeds; +static uae_u16 bplcoltable[256]; +static uae_u16 sprcoltable[256]; +static uae_u16 sprbplcoltable[256]; +static uae_u8 sprcolmask; +static int denise_spr_nearestcnt; + +static int denise_y_start, denise_y_end; + +static int denise_pixtotal, denise_linecnt, denise_startpos, denise_cck, denise_total; +static uae_u32 *buf1, *buf2, *buf_d; +static uae_u16 *gbuf; +static uae_u8 pixx0, pixx1, pixx2, pixx3; +static uae_u32 debug_buf[256 * 2 * 4], debug_bufx[256 * 2 * 4]; + + void set_inhibit_frame(int monid, int bit) { struct amigadisplay *ad = &adisplays[monid]; @@ -320,45 +324,6 @@ void toggle_inhibit_frame(int monid, int bit) ad->inhibit_frame ^= 1 << bit; } -#ifdef XLINECHECK -static void xlinecheck (unsigned int start, unsigned int end) -{ - unsigned int xstart = (unsigned int)xlinebuffer + start * vidinfo->drawbuffer.pixbytes; - unsigned int xend = (unsigned int)xlinebuffer + end * vidinfo->drawbuffer.pixbytes; - unsigned int end1 = (unsigned int)vidinfo->drawbuffer.bufmem + vidinfo->drawbuffer.rowbytes * vidinfo->drawbuffer.height; - int min = linetoscr_x_adjust_bytes / vidinfo->drawbuffer.pixbytes; - int ok = 1; - - if (xstart >= vidinfo->drawbuffer.emergmem && xstart < vidinfo->drawbuffer.emergmem + 4096 * vidinfo->drawbuffer.pixbytes && - xend >= vidinfo->drawbuffer.emergmem && xend < vidinfo->drawbuffer.emergmem + 4096 * vidinfo->drawbuffer.pixbytes) - return; - - if (xstart < (unsigned int)vidinfo->drawbuffer.bufmem || xend < (unsigned int)vidinfo->drawbuffer.bufmem) - ok = 0; - if (xend > end1 || xstart >= end1) - ok = 0; - xstart -= (unsigned int)vidinfo->drawbuffer.bufmem; - xend -= (unsigned int)vidinfo->drawbuffer.bufmem; - if ((xstart % vidinfo->drawbuffer.rowbytes) >= vidinfo->drawbuffer.width * vidinfo->drawbuffer.pixbytes) - ok = 0; - if ((xend % vidinfo->drawbuffer.rowbytes) >= vidinfo->drawbuffer.width * vidinfo->drawbuffer.pixbytes) - ok = 0; - if (xstart >= xend) - ok = 0; - if (xend - xstart > vidinfo->drawbuffer.width * vidinfo->drawbuffer.pixbytes) - ok = 0; - - if (!ok) { - write_log (_T("*** %d-%d (%dx%dx%d %d) %p\n"), - start - min, end - min, vidinfo->drawbuffer.width, vidinfo->drawbuffer.height, - vidinfo->drawbuffer.pixbytes, vidinfo->drawbuffer.rowbytes, - xlinebuffer); - } -} -#else -#define xlinecheck(start, end) -#endif - static void clearbuffer (struct vidbuffer *dst) { if (!dst->bufmem_allocated) @@ -370,13 +335,6 @@ static void clearbuffer (struct vidbuffer *dst) } } -static void reset_decision_table (void) -{ - for (int i = 0; i < sizeof linestate / sizeof *linestate; i++) { - linestate[i] = LINE_UNDECIDED; - } -} - static void count_frame(int monid) { struct amigadisplay *ad = &adisplays[monid]; @@ -397,9 +355,12 @@ STATIC_INLINE int xshift (int x, int shift) int coord_native_to_amiga_x (int x) { + return 0; + /* x += visible_left_border; x = xshift (x, 1 - lores_shift); return x + 2 * DISPLAY_LEFT_SHIFT - 2 * DIW_DDF_OFFSET; + */ } int coord_native_to_amiga_y (int y) @@ -409,20 +370,6 @@ int coord_native_to_amiga_y (int y) return native2amiga_line_map[y] + thisframe_y_adjust - minfirstline; } -STATIC_INLINE int res_shift_from_window (int x) -{ - if (res_shift >= 0) - return x >> res_shift; - return x << -res_shift; -} - -STATIC_INLINE int res_shift_from_amiga (int x) -{ - if (res_shift >= 0) - return x >> res_shift; - return x << -res_shift; -} - void notice_screen_contents_lost(int monid) { struct amigadisplay *ad = &adisplays[monid]; @@ -441,12 +388,11 @@ bool isnativevidbuf(int monid) } extern int plffirstline_total, plflastline_total; -extern int first_planes_vpos, last_planes_vpos; extern int diwfirstword_total, diwlastword_total; extern int ddffirstword_total, ddflastword_total; extern bool vertical_changed, horizontal_changed; extern int firstword_bplcon1; -extern int lof_display; +extern bool lof_display; #define MIN_DISPLAY_W 256 #define MIN_DISPLAY_H 192 @@ -460,7 +406,7 @@ void get_custom_topedge (int *xp, int *yp, bool max) { if (isnativevidbuf(0) && !max) { int x, y; - x = visible_left_border + (DISPLAY_LEFT_SHIFT << currprefs.gfx_resolution); + x = visible_left_border; y = minfirstline << currprefs.gfx_vresolution; #if 0 int dbl1, dbl2; @@ -481,18 +427,6 @@ void get_custom_topedge (int *xp, int *yp, bool max) } } -void get_screen_blanking_limits(int *hbstop, int *hbstrt, int *vbstop, int *vbstrt) -{ - *vbstop = vblank_bottom_stop; - *vbstrt = vblank_top_start; - - int hblank_left = exthblank ? hblank_left_start : hblank_left_start_hard; - int hblank_right = exthblank ? hblank_right_stop : hblank_right_stop_hard; - - *hbstop = hblank_left - visible_left_border; - *hbstrt = hblank_right - visible_left_border; -} - static void reset_custom_limits(void) { gclow = gcloh = gclox = gcloy = 0; @@ -500,115 +434,10 @@ static void reset_custom_limits(void) center_reset = 1; } -static void expand_vb_state(void) -{ - full_blank = vb_state == VB_PRGVB || (vb_state >= VB_XBLANK && vb_state < VB_XBORDER) || (vb_state == VB_XBORDER); - vsync_debug = (vb_state & VB_VS) != 0; - vblank_debug = (vb_state & VB_VB) != 0; -} - -static void extblankcheck(void) -{ - exthblankon = dp_for_drawing && (dp_for_drawing->bplcon3 & 1) && (dp_for_drawing->bplcon0 & 1); - if (exthblanken && exthblankon) { - exthblank = exthblank_set; - } - if (exthblanken && !exthblankon) { - exthblank = 0; - } -} - -static void reset_hblanking_limits(void) -{ - hblank_left_start = visible_left_start; - hblank_right_stop = visible_right_stop; - - if (hblank_left_start < visible_left_border) { - hblank_left_start = visible_left_border; - } - if (hblank_right_stop > visible_right_border) { - hblank_right_stop = visible_right_border; - } -} - -static void get_vblanking_limits(int *vbstrtp, int *vbstopp, bool overscanonly) -{ - int vbstrt = vblank_firstline_hw; - if (!ecs_denise) { - vbstrt--; - } - int vbstop = maxvpos + lof_display; - if (!ecs_denise && !ecs_agnus) { - if (currprefs.gfx_overscanmode >= OVERSCANMODE_BROADCAST) { - vbstop++; - } - } else if (ecs_agnus && !ecs_denise) { - // hide hblank bug by faking vblank start 1 line earlier - if (currprefs.gfx_overscanmode < OVERSCANMODE_BROADCAST) { - vbstrt++; - vbstop--; - } - } - if (currprefs.gfx_overscanmode < OVERSCANMODE_OVERSCAN && !overscanonly) { - int mult = (OVERSCANMODE_OVERSCAN - currprefs.gfx_overscanmode) * 5; - vbstrt += mult; - vbstop -= mult; - } - vbstrt <<= currprefs.gfx_vresolution; - vbstop <<= currprefs.gfx_vresolution; - if (vblank_top_start < vbstrt) { - vblank_top_start = vbstrt; - } - if (vblank_bottom_stop > vbstop) { - vblank_bottom_stop = vbstop; - } - *vbstrtp = vbstrt; - *vbstopp = vbstop; -} - -// this handles hardwired vblank -// vb_state in do_color_changes() handles programmed vblank -static void set_vblanking_limits(void) -{ - vblank_top_start = visible_top_start; - vblank_bottom_stop = visible_bottom_stop; - - if (vblank_top_start < visible_top_start) { - vblank_top_start = visible_top_start; - } - if (vblank_bottom_stop > visible_bottom_stop) { - vblank_bottom_stop = visible_bottom_stop; - } - - if (syncdebug) { - return; - } - - bool hardwired = true; - if (ecs_agnus) { - hardwired = (new_beamcon0 & BEAMCON0_VARVBEN) == 0; - // ECS Denise with exthblank: always use thisline_decision.vb blanking method - if (ecs_denise && !aga_mode && exthblank) { - hardwired = false; - } - } - if (hardwired) { - int vbstrt, vbstop; - get_vblanking_limits(&vbstrt, &vbstop, false); - if (vblank_top_start < vbstrt) { - vblank_top_start = vbstrt; - } - if (vblank_bottom_stop > vbstop) { - vblank_bottom_stop = vbstop; - } - } -} - int get_vertical_visible_height(bool useoldsize) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; int h = vidinfo->drawbuffer.inheight; - int vbstrt, vbstop; if (programmedmode <= 1) { h = maxvsize_display; @@ -629,11 +458,7 @@ int get_vertical_visible_height(bool useoldsize) hardwired = (new_beamcon0 & BEAMCON0_VARVBEN) == 0; } if (hardwired) { - get_vblanking_limits(&vbstrt, &vbstop, true); - int hh = vbstop - vbstrt; - if (interlace_seen && lof_display) { - hh -= 1 << currprefs.gfx_vresolution; - } + int hh = denise_visible_lines << currprefs.gfx_vresolution; if (h > hh) { h = hh; } @@ -642,81 +467,6 @@ int get_vertical_visible_height(bool useoldsize) return h; } -static void set_hblanking_limits(void) -{ - if (syncdebug) { - hblank_left_start_hard = visible_left_start; - hblank_right_stop_hard = visible_right_stop; - return; - } - - hblank_left_start_hard = hblank_left_start; - hblank_right_stop_hard = hblank_right_stop; - - // horizontal blanking - bool hardwired = !dp_for_drawing || !ce_is_extblankset(colors_for_drawing.extra); - bool doblank = false; - int hbstrt = ((maxhpos_short + 8) << CCK_SHRES_SHIFT) - 3; - if (!ecs_denise) { - hbstrt -= 4; - } - int hbstop = (47 << CCK_SHRES_SHIFT) - 7; - - if (currprefs.gfx_overscanmode < OVERSCANMODE_OVERSCAN) { - int mult = (OVERSCANMODE_OVERSCAN - currprefs.gfx_overscanmode) * 4; - hbstrt -= mult << CCK_SHRES_SHIFT; - hbstop += mult << CCK_SHRES_SHIFT; - if (currprefs.gfx_overscanmode == 0) { - hbstrt += 2 << CCK_SHRES_SHIFT; - hbstop -= 2 << CCK_SHRES_SHIFT; - } - } - - // programmed mode with hardwired hblanking - if (hblank_left_start_hard < coord_hw_to_window_x_shres(hbstop)) { - hblank_left_start_hard = coord_hw_to_window_x_shres(hbstop); - } - if (hblank_right_stop_hard > coord_hw_to_window_x_shres(hbstrt)) { - hblank_right_stop_hard = coord_hw_to_window_x_shres(hbstrt); - } - - if (hardwired) { - doblank = true; - } else if (currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN) { - doblank = true; - } else if (currprefs.gfx_overscanmode == OVERSCANMODE_BROADCAST) { - hbstrt = ((maxhpos_short + 12) << CCK_SHRES_SHIFT) - 3; - doblank = true; - } else if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { - doblank = true; - } - - if (doblank && programmedmode != 1) { - // programmed mode with programmed hblanking - // reposition to sync - // use hardwired hblank emulation as overscan blanking. - if ((new_beamcon0 & bemcon0_hsync_mask) && !hardwired) { - extern uae_u16 hsstrt; - hbstrt += (hsstrt - 18) << CCK_SHRES_SHIFT; - hbstop += (hsstrt - 18) << CCK_SHRES_SHIFT; - } - - if (currprefs.chipset_hr) { - hbstrt &= ~(3 >> currprefs.gfx_resolution); - hbstop &= ~(3 >> currprefs.gfx_resolution); - } else { - hbstrt &= ~3; - hbstop &= ~3; - } - if (hblank_left_start < coord_hw_to_window_x_shres(hbstop)) { - hblank_left_start = coord_hw_to_window_x_shres(hbstop); - } - if (hblank_right_stop > coord_hw_to_window_x_shres(hbstrt)) { - hblank_right_stop = coord_hw_to_window_x_shres(hbstrt); - } - } -} - void get_custom_raw_limits(int *pw, int *ph, int *pdx, int *pdy) { if (stored_width > 0) { @@ -880,42 +630,50 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) interlace_count = 0; } - if (plflastline_total < 4) - plflastline_total = last_planes_vpos; + int diwfirst, diwlast; + if (aga_mode) { + diwfirst = diwfirstword_total; + diwlast = diwlastword_total; + } else { + diwfirst = diwfirstword_total << 2; + diwlast = diwlastword_total << 2; + } - ddffirstword_total = coord_hw_to_window_x_lores(ddffirstword_total * 2 + DIW_DDF_OFFSET); - ddflastword_total = coord_hw_to_window_x_lores(ddflastword_total * 2 + DIW_DDF_OFFSET); + int ddffirst = ddffirstword_total << (RES_MAX + 1); + int ddflast = ddflastword_total << (RES_MAX + 1); if (doublescan <= 0 && !programmedmode) { - int min = coord_diw_lores_to_window_x(92); - int max = coord_diw_lores_to_window_x(460); - if (diwfirstword_total < min) - diwfirstword_total = min; - if (diwlastword_total > max) - diwlastword_total = max; - if (ddffirstword_total < min) - ddffirstword_total = min; - if (ddflastword_total > max) - ddflastword_total = max; - if (0 && !aga_mode) { - if (ddffirstword_total > diwfirstword_total) - diwfirstword_total = ddffirstword_total; - if (ddflastword_total < diwlastword_total) - diwlastword_total = ddflastword_total; + int min = 92 << RES_MAX; + int max = 460 << RES_MAX; + if (diwfirst < min) + diwfirst = min; + if (diwlast > max) + diwlast = max; + if (ddffirstword_total < 30000) { + if (ddffirst < min) + ddffirst = min; + if (ddflast > max) + ddflast = max; + if (0 && !aga_mode) { + if (ddffirst > diwfirst) + diwfirst = ddffirst; + if (ddflast < diwlast) + diwlast = ddflast; + } } } - w = diwlastword_total - diwfirstword_total; - dx = diwfirstword_total - visible_left_border; + w = diwlast - diwfirst; + dx = diwfirst - (hdisplay_left_border << (RES_MAX + 1)); + + w >>= (RES_MAX - currprefs.gfx_resolution); + dx >>= (RES_MAX - currprefs.gfx_resolution); y2 = plflastline_total; - if (y2 > last_planes_vpos) - y2 = last_planes_vpos; y1 = plffirstline_total; - if (first_planes_vpos > y1) - y1 = first_planes_vpos; - if (minfirstline > y1) - y1 = minfirstline; + + if (minfirstline_linear > y1) + y1 = minfirstline_linear; dbl2 = dbl1 = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { @@ -923,10 +681,10 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) dbl2--; } - h = y2 - y1; - dy = y1 - minfirstline; + h = y2 - y1 + 1; + dy = y1 - minfirstline_linear; - if (first_planes_vpos == 0) { + if (plffirstline_total >= 30000) { // no planes enabled during frame if (ret < 0) return 1; @@ -940,8 +698,8 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) dx = 0; *prealh = -1; - if (programmedmode != 1 && first_planes_vpos) { - int th = (maxvpos - minfirstline) * 95 / 100; + if (programmedmode != 1 && plffirstline_total < 30000) { + int th = (current_linear_vpos - minfirstline_linear) * 95 / 100; if (th > h) { th = xshift (th, dbl1); *prealh = th; @@ -954,6 +712,7 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) if (w == 0 || h == 0) return 0; +#if 0 if (doublescan <= 0 && programmedmode != 1) { if ((w >> currprefs.gfx_resolution) < MIN_DISPLAY_W) { dx += (w - (MIN_DISPLAY_W << currprefs.gfx_resolution)) / 2; @@ -972,6 +731,7 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) h = MAX_DISPLAY_H << dbl1; } } +#endif if (gclow == w && gcloh == h && gclox == dx && gcloy == dy) return ret; @@ -979,9 +739,9 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) if (w <= 0 || h <= 0 || dx < 0 || dy < 0) return ret; if (doublescan <= 0 && programmedmode != 1) { - if (dx > vidinfo->outbuffer->inwidth / 3) + if (dx > vidinfo->outbuffer->inwidth / 2) return ret; - if (dy > vidinfo->outbuffer->inheight / 3) + if (dy > vidinfo->outbuffer->inheight / 2) return ret; } @@ -996,9 +756,9 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) *pdy = dy; #if 1 write_log (_T("Display Size: %dx%d Offset: %dx%d\n"), w, h, dx, dy); - write_log (_T("First: %d Last: %d MinV: %d MaxV: %d Min: %d\n"), + write_log (_T("First: %d Last: %d Min: %d\n"), plffirstline_total, plflastline_total, - first_planes_vpos, last_planes_vpos, minfirstline); + minfirstline); #endif center_reset = 1; return 1; @@ -1013,11 +773,7 @@ void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl) dx = diwfirstword_total - visible_left_border; y2 = plflastline_total; - if (y2 > last_planes_vpos) - y2 = last_planes_vpos; y1 = plffirstline_total; - if (first_planes_vpos > y1) - y1 = first_planes_vpos; if (minfirstline > y1) y1 = minfirstline; @@ -1063,427 +819,6 @@ void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl) *pdx = dx; *pdy = dy; } -/* Record DIW of the current line for use by centering code. */ -void record_diw_line (int plfstrt, int first, int last) -{ - if (last > max_diwstop) - max_diwstop = last; - if (first < min_diwstart) { - min_diwstart = first; - /* - if (plfstrt * 2 > min_diwstart) - min_diwstart = plfstrt * 2; - */ - } -} - -STATIC_INLINE int get_shdelay_add(void) -{ - if (bplres == RES_SUPERHIRES) - return 0; - if (currprefs.chipset_hr) - return 0; - int add = bpldelay_sh; - add >>= RES_MAX - currprefs.gfx_resolution; - return add; -} - -/* -* Screen update macros/functions -*/ - -/* The important positions in the line: where do we start drawing the left border, -where do we start drawing the playfield, where do we start drawing the right border. -All of these are forced into the visible window (VISIBLE_LEFT_BORDER .. VISIBLE_RIGHT_BORDER). -PLAYFIELD_START and PLAYFIELD_END are in window coordinates. */ -static int playfield_start_pre, playfield_end_pre; -static int playfield_start, playfield_end; -static int real_playfield_start, real_playfield_end; -static int playfield_diff; -static int sprite_playfield_start, sprite_end; -static int may_require_hard_way; -static int linetoscr_diw_start, linetoscr_diw_end; -static int native_ddf_left, native_ddf_right; -#if 0 -static int hamleftborderhidden; -#endif - -static int pixels_offset; -static int src_pixel; -/* How many pixels in window coordinates which are to the left of the left border. */ -static int unpainted; - -// blank = -1: force normal border color even if borderblank is active -static xcolnr getbgc(int blank) -{ -#if BG_COLOR_DEBUG - if (exthblank) - return xcolors[0x888]; - else if (blank > 0) - return xcolors[0x088]; - else if (blank < 0) - return xcolors[0x0f8]; - else if (hposblank == 1) - return xcolors[0xf00]; - else if (hposblank == 2) - return xcolors[0x0f0]; - else if (hposblank == 3) - return xcolors[0x00f]; - else if (ce_is_borderblank(colors_for_drawing.extra)) - return xcolors[0xc80]; - //return colors_for_drawing.acolors[0]; - return xcolors[0xf0f]; -#endif - if (exthblank > 0 || exthblank_force) { - return fullblack; - } - bool extblken = ce_is_extblankset(colors_for_drawing.extra); - // extblken=1: hblank and vblank = black - if (!(vb_state & VB_NOVB) && extblken && aga_mode) { - return fullblack; - } - bool brdblank = ce_is_borderblank(colors_for_drawing.extra); - if (vb_state & VB_XBORDER) { - if (brdblank) - return fullblack; - return colors_for_drawing.acolors[0]; - } - if (hposblank) { - return fullblack; - } -#if 0 - if (brdblank && blank == 4) { - return colors_for_drawing.acolors[0]; - } -#endif - // borderblank = black (overrides extblken) - if (brdblank && blank >= 0) { - return fullblack; - } - if (blank > 0) { - return fullblack; - } - return colors_for_drawing.acolors[0]; -} - - -static void set_res_shift(void) -{ - int shift = lores_shift - bplres; - int old = res_shift; - res_shift = shift; - if (res_shift != old) - pfield_set_linetoscr(); -} - -/* Initialize the variables necessary for drawing a line. -* This involves setting up start/stop positions and display window -* borders. */ -static void pfield_init_linetoscr (bool border) -{ - /* First, get data fetch start/stop in DIW coordinates. */ - int ddf_left = dp_for_drawing->plfleft + DIW_DDF_OFFSET - DDF_OFFSET; - int ddf_right = dp_for_drawing->plfright + DIW_DDF_OFFSET - DDF_OFFSET; - int native_ddf_left2; - bool expanded = false; - - bplmaxplanecnt = dp_for_drawing->max_planes; - - if (border) - ddf_left = DISPLAY_LEFT_SHIFT; - - /* Compute datafetch start/stop in pixels; native display coordinates. */ - native_ddf_left = coord_hw_to_window_x_lores(ddf_left); - native_ddf_right = coord_hw_to_window_x_lores(ddf_right); - - // Blerkenwiegel/Scoopex workaround - native_ddf_left2 = native_ddf_left; - - if (native_ddf_left < 0) - native_ddf_left = 0; - if (native_ddf_right > MAX_PIXELS_PER_LINE) - native_ddf_right = MAX_PIXELS_PER_LINE; - if (native_ddf_right < native_ddf_left) - native_ddf_right = native_ddf_left; - - linetoscr_diw_start = dp_for_drawing->diwfirstword; - linetoscr_diw_end = dp_for_drawing->diwlastword; - if (linetoscr_diw_start < 0) { - linetoscr_diw_start = 0; - } - /* Perverse cases happen. */ - if (linetoscr_diw_end < linetoscr_diw_start) - linetoscr_diw_end = linetoscr_diw_start; - - set_res_shift(); - - playfield_start = linetoscr_diw_start; - playfield_end = linetoscr_diw_end; - - if (playfield_start < native_ddf_left) - playfield_start = native_ddf_left; - if (playfield_end > native_ddf_right) - playfield_end = native_ddf_right; - - if (playfield_start < visible_left_border) - playfield_start = visible_left_border; - if (playfield_start > visible_right_border) - playfield_start = visible_right_border; - if (playfield_end < visible_left_border) - playfield_end = visible_left_border; - if (playfield_end > visible_right_border) - playfield_end = visible_right_border; - - real_playfield_start = playfield_start; - sprite_playfield_start = playfield_start; - real_playfield_end = playfield_end; - sprite_end = linetoscr_diw_end; - - // Sprite hpos don't include DIW_DDF_OFFSET and can appear 1 lores pixel - // before first bitplane pixel appears. - // This means "bordersprite" condition is possible under OCS/ECS too. Argh! - - if (dip_for_drawing->nr_sprites) { - int gap = 0; - // OCS Denise: no "bordersprite" - if (aga_mode) { - // If AGA: "bordersprite" starts 0.5 lores pixels earlier - if (currprefs.chipset_hr) { - // 1 lores pixel - gap = 1 << lores_shift; - // 1 lores -> 1 hires but don't round to zero. - if (gap >= 2) { - gap /= 2; - } - } else { - gap = 1 << lores_shift; - } - } else if (ecs_denise) { - // If ECS Denise: "bordersprite" starts 1 lores pixel earlier - gap = 1 << lores_shift; - } - if (!ce_is_borderblank(colors_for_drawing.extra)) { - /* bordersprite off or not supported: sprites are visible until diw_end */ - if (playfield_end < linetoscr_diw_end && hblank_right_stop > playfield_end) { - playfield_end = linetoscr_diw_end; - } - // A1000 shows extra sprite pixel after hdiw end - if (denisea1000) { - sprite_end += 1 << lores_shift; - } - int plfleft = dp_for_drawing->plfleft - DDF_OFFSET; - int left = coord_hw_to_window_x_lores(plfleft); - int total = left - dp_for_drawing->diwfirstword; - if (total > 0 && gap > 0) { - if (gap > total) { - gap = total; - } - left -= gap; - } - if (left < visible_left_border) { - left = visible_left_border; - } - if (left < playfield_start && left >= linetoscr_diw_start) { - playfield_start = left; - } - sprite_playfield_start = playfield_start; - } else { - if (!ce_is_bordersprite(colors_for_drawing.extra)) { - bool early = ((dp_for_drawing->plfleft >> 1) & 1) != 0; - int plfleft = dp_for_drawing->plfleft - DDF_OFFSET + (early ? 1 * 2 : 0); - sprite_playfield_start = coord_hw_to_window_x_lores(plfleft); - sprite_playfield_start -= gap; - } - if (playfield_end < linetoscr_diw_end && hblank_right_stop > playfield_end) { - playfield_end = linetoscr_diw_end; - } - } - } - -#ifdef AGA - // if BPLCON4 is non-zero or borderblank: it can affect background color until end of DIW. - if (dp_for_drawing->xor_seen || ce_is_borderblank(colors_for_drawing.extra)) { - if (playfield_end < linetoscr_diw_end && hblank_right_stop > playfield_end) { - playfield_end = linetoscr_diw_end; - expanded = true; - } - } - playfield_diff = 0; - may_require_hard_way = 0; - if (dp_for_drawing->bordersprite_seen && !ce_is_borderblank(colors_for_drawing.extra) && dip_for_drawing->nr_sprites) { - int min = visible_right_border, max = visible_left_border, i; - for (i = 0; i < dip_for_drawing->nr_sprites; i++) { - int x; - x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].pos; - if (x < min) - min = x; - // include max extra pixels, sprite may be 2x or 4x size: 4x - 1. - x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].max + (4 - 1); - if (x > max) - max = x; - } -#if 0 - min = coord_hw_to_window_x(min >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); - if (min < playfield_start) - playfield_start = min; - if (playfield_start < visible_left_border) - playfield_start = visible_left_border; -#endif - max = coord_hw_to_window_x_lores(max >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); - if (max > playfield_end) - playfield_end = max; - if (playfield_end > visible_right_border) - playfield_end = visible_right_border; - sprite_playfield_start = 0; - may_require_hard_way = 1; - sprite_end = max; - } -#endif - - // AGA borderblank starts horizontally 1 shres pixel before bitplanes start - playfield_start_pre = playfield_start; - playfield_end_pre = playfield_end; - if (currprefs.chipset_hr && aga_mode && bplres > 0) { - if (currprefs.gfx_resolution == RES_SUPERHIRES) { - playfield_start_pre -= 1; - playfield_end_pre -= 1; - } else { - playfield_start_pre &= ~1; - playfield_end_pre &= ~1; - } - } - - unpainted = visible_left_border < playfield_start ? 0 : visible_left_border - playfield_start; - unpainted = res_shift_from_window (unpainted); - - int first_x = sprite_first_x; - int last_x = sprite_last_x; - if (first_x < last_x) { - if (dp_for_drawing->bordersprite_seen && !ce_is_borderblank(colors_for_drawing.extra)) { - if (first_x > visible_left_border) - first_x = visible_left_border; - if (last_x < visible_right_border) - last_x = visible_right_border; - } - if (first_x < 0) - first_x = 0; - if (last_x > MAX_PIXELS_PER_LINE - 2) - last_x = MAX_PIXELS_PER_LINE - 2; - if (first_x < last_x) - memset (spritepixels + first_x, 0, sizeof (struct spritepixelsbuf) * (last_x - first_x + 1)); - } - - sprite_last_x = 0; - sprite_first_x = MAX_PIXELS_PER_LINE - 1; - - /* Now, compute some offsets. */ - ddf_left -= DISPLAY_LEFT_SHIFT; - if (ddf_left < 0) - ddf_left = 0; - ddf_left <<= bplres; - pixels_offset = MAX_PIXELS_PER_LINE - ddf_left; - - int leftborderhidden = playfield_start - native_ddf_left2; - -#if 0 - hamleftborderhidden = 0; - if (hblank_left_start > playfield_start) { - leftborderhidden += hblank_left_start - playfield_start; - hamleftborderhidden = hblank_left_start - playfield_start; - } -#endif - - src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window(leftborderhidden); - - if (may_require_hard_way) { - // must use "hard_way" rendering if negative leftborderhidden - if (src_pixel < MAX_PIXELS_PER_LINE) - may_require_hard_way = -1; - if (playfield_start < real_playfield_start) { - playfield_diff = res_shift_from_window(real_playfield_start - playfield_start); - } - } - - if (dip_for_drawing->nr_sprites == 0 && !expanded) - return; - - if (dip_for_drawing->nr_sprites && aga_mode) { - int add = get_shdelay_add(); - if (add) { - if (sprite_playfield_start > 0) { - sprite_playfield_start -= add; - } else { - ;// this is most likely wrong: playfield_start -= add; - } - } - } - - /* We need to clear parts of apixels. */ - if (linetoscr_diw_start < native_ddf_left) { - int size = res_shift_from_window (native_ddf_left - linetoscr_diw_start); - linetoscr_diw_start = native_ddf_left; - memset (pixdata.apixels + MAX_PIXELS_PER_LINE - size, 0, size); - } - if (linetoscr_diw_end > native_ddf_right) { - int pos = res_shift_from_window(native_ddf_right - native_ddf_left); - int size = res_shift_from_window(linetoscr_diw_end - native_ddf_right); - if (pos + size > MAX_PIXELS_PER_LINE) - size = MAX_PIXELS_PER_LINE - pos; - if (size > 0) - memset (pixdata.apixels + MAX_PIXELS_PER_LINE + pos, 0, size); - linetoscr_diw_start = native_ddf_left; - } -} - -// erase sprite graphics in pixdata if they were outside of ddf -static void pfield_erase_hborder_sprites (void) -{ - if (sprite_first_x < native_ddf_left) { - int size = res_shift_from_window (native_ddf_left - sprite_first_x); - memset (pixdata.apixels + MAX_PIXELS_PER_LINE - size, 0, size); - } - if (sprite_last_x > native_ddf_right) { - int pos = res_shift_from_window (native_ddf_right - native_ddf_left); - int size = res_shift_from_window (sprite_last_x - native_ddf_right); - if (pos + size > MAX_PIXELS_PER_LINE) - size = MAX_PIXELS_PER_LINE - pos; - if (size > 0) - memset (pixdata.apixels + MAX_PIXELS_PER_LINE + pos, 0, size); - } -} - -// erase whole viewable area if sprite in upper or lower border -static void pfield_erase_vborder_sprites (void) -{ - if (visible_right_border <= visible_left_border) - return; - int pos = 0; - int size = 0; - if (visible_left_border < native_ddf_left) { - size = res_shift_from_window (native_ddf_left - visible_left_border); - pos = -size; - } - if (visible_right_border > native_ddf_left) - size += res_shift_from_window (visible_right_border - native_ddf_left); - memset (pixdata.apixels + MAX_PIXELS_PER_LINE - pos, 0, size); -} - - -STATIC_INLINE uae_u16 merge_2pixel16 (uae_u16 p1, uae_u16 p2) -{ - uae_u16 v = ((((p1 >> xredcolor_s) & xredcolor_m) + ((p2 >> xredcolor_s) & xredcolor_m)) / 2) << xredcolor_s; - v |= ((((p1 >> xbluecolor_s) & xbluecolor_m) + ((p2 >> xbluecolor_s) & xbluecolor_m)) / 2) << xbluecolor_s; - v |= ((((p1 >> xgreencolor_s) & xgreencolor_m) + ((p2 >> xgreencolor_s) & xgreencolor_m)) / 2) << xgreencolor_s; - return v; -} -STATIC_INLINE uae_u32 merge_2pixel32 (uae_u32 p1, uae_u32 p2) -{ - uae_u32 v = ((((p1 >> 16) & 0xff) + ((p2 >> 16) & 0xff)) / 2) << 16; - v |= ((((p1 >> 8) & 0xff) + ((p2 >> 8) & 0xff)) / 2) << 8; - v |= ((((p1 >> 0) & 0xff) + ((p2 >> 0) & 0xff)) / 2) << 0; - return v; -} - static bool get_genlock_very_rare_and_complex_case(uae_u8 v) { if (ecs_genlock_features_colorkey) { @@ -1502,12 +837,8 @@ static bool get_genlock_very_rare_and_complex_case(uae_u8 v) } } else { // color key match? - if (aga_mode) { - if (colors_for_drawing.color_regs_aga[v] & COLOR_CHANGE_GENLOCK) - return false; - } else { - if (colors_for_drawing.color_regs_ecs[v] & 0x8000) - return false; + if (denise_colors.color_regs_genlock[v]) { + return false; } } } @@ -1539,3997 +870,5017 @@ STATIC_INLINE bool get_genlock_transparency_border(void) return false; } else { // border color with BRDNTRAN bit set = not transparent - if (ce_is_borderntrans(colors_for_drawing.extra)) + if (bplcon3_denise & 0x0010) return true; return get_genlock_very_rare_and_complex_case(0); } } -STATIC_INLINE void fill_line_16 (uae_u8 *buf, int start, int stop, int blank) +static void gen_pfield_tables(void) { - uae_u16 *b = (uae_u16 *)buf; - unsigned int i; - unsigned int rem = 0; - xcolnr col = getbgc (blank); - if (((uintptr_t)&b[start]) & 1) - b[start++] = (uae_u16) col; - if (start >= stop) - return; - if (((uintptr_t)&b[stop]) & 1) { - rem++; - stop--; - } - for (i = start; i < stop; i += 2) { - uae_u32 *b2 = (uae_u32 *)&b[i]; - *b2 = col; - } - if (rem) - b[stop] = (uae_u16)col; -} + for (int i = 0; i < 256; i++) { + int plane1 = ((i >> 0) & 1) | ((i >> 1) & 2) | ((i >> 2) & 4) | ((i >> 3) & 8); + int plane2 = ((i >> 1) & 1) | ((i >> 2) & 2) | ((i >> 3) & 4) | ((i >> 4) & 8); -STATIC_INLINE void fill_line_32 (uae_u8 *buf, int start, int stop, int blank) -{ - uae_u32 *b = (uae_u32 *)buf; - unsigned int i; - xcolnr col = getbgc (blank); - for (i = start; i < stop; i++) - b[i] = col; + dblpf_2nd1[i] = plane1 == 0 && plane2 != 0; + dblpf_2nd2[i] = plane2 != 0; + +#ifdef AGA + dblpf_ind1_aga[i] = plane1 == 0 ? plane2 : plane1; + dblpf_ind2_aga[i] = plane2 == 0 ? plane1 : plane2; +#endif + + dblpf_ms1[i] = plane1 == 0 ? (plane2 == 0 ? 16 : 8) : 0; + dblpf_ms2[i] = plane2 == 0 ? (plane1 == 0 ? 16 : 0) : 8; + dblpf_ms[i] = i == 0 ? 16 : 8; + + if (plane2 > 0) + plane2 += 8; + // use OCS/ECS unused plane bits 6 and 7 for + // dualplayfield BPLCON2 invalid value emulation. + int plane1x = (i & 0x40) ? 0 : plane1; + int plane2x = (i & 0x80) ? 0 : plane2; + dblpf_ind1[i] = plane1 == 0 ? plane2x : plane1x; + dblpf_ind2[i] = plane2 == 0 ? plane1x : plane2x; + + sprite_offs[i] = (i & 15) ? 0 : 2; + } } -static void pfield_do_fill_line (int start, int stop, int blank) +void init_row_map(void) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - if (stop <= start) - return; - switch (vidinfo->drawbuffer.pixbytes) { - case 2: fill_line_16 (xlinebuffer, start, stop, blank); break; - case 4: fill_line_32 (xlinebuffer, start, stop, blank); break; + static uae_u8 *oldbufmem; + static int oldheight, oldpitch; + static bool oldgenlock, oldburst; + int i, j; + + if (vidinfo->drawbuffer.height_allocated > max_uae_height) { + write_log (_T("Resolution too high, aborting\n")); + abort (); } - if (need_genlock_data) { - memset(xlinebuffer_genlock + start, get_genlock_transparency_border(), stop - start); + if (!row_map) { + row_map = xmalloc(uae_u8*, max_uae_height + 1); + row_map_genlock = xmalloc(uae_u16*, max_uae_height + 1); } -} -static void pfield_do_darken_line(int start, int stop, int vp) -{ - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - if (stop <= start) + if (oldbufmem && oldbufmem == vidinfo->drawbuffer.bufmem && + oldheight == vidinfo->drawbuffer.height_allocated && + oldpitch == vidinfo->drawbuffer.rowbytes && + oldgenlock == init_genlock_data && + oldburst == (row_map_color_burst_buffer ? 1 : 0)) return; - if (currprefs.gfx_resolution) { - vp >>= 1; + xfree(row_map_genlock_buffer); + row_map_genlock_buffer = NULL; + if (init_genlock_data) { + row_map_genlock_buffer = xcalloc(uae_u16, vidinfo->drawbuffer.width_allocated * (vidinfo->drawbuffer.height_allocated + 2)); } - bool brd = !vsync_debug && !hsync_debug && !vblank_debug && !hblank_debug && !hcenter_debug && ce_is_borderblank(colors_for_drawing.extra); - bool vs = vsync_debug; - if (hcenter_debug) { - vs = false; - + xfree(row_map_color_burst_buffer); + row_map_color_burst_buffer = NULL; + if (currprefs.cs_color_burst) { + row_map_color_burst_buffer = xcalloc(uae_u8, vidinfo->drawbuffer.height_allocated + 2); } - int c0 = 0x000; - int c1 = 0x136; - int c2 = 0x686; - bool csync = currprefs.gfx_overscanmode == OVERSCANMODE_ULTRA + 2; - bool trans = currprefs.gfx_overscanmode == OVERSCANMODE_ULTRA; - if (!csync) { - bool sync = hsync_debug || vs; - if (sync && currprefs.gfx_overscanmode > OVERSCANMODE_ULTRA) { - c0 = 0x831; - c1 = 0x000; - } - if (hcenter_debug && vsync_debug && currprefs.gfx_overscanmode > OVERSCANMODE_ULTRA) { - c0 = 0x381; - } - } else { - if (hsync_debug) { - c0 = 0x831; - c1 = 0x000; - } - if (hcenter_debug && currprefs.gfx_overscanmode > OVERSCANMODE_ULTRA) { - c0 = 0x381; - } + j = oldheight == 0 ? max_uae_height : oldheight; + for (i = vidinfo->drawbuffer.height_allocated; i < max_uae_height + 1 && i < j + 1; i++) { + row_map[i] = row_tmp8; + row_map_genlock[i] = row_tmp16; } - if (!trans) { - vp = 0; - if (!c0) { - c0 = c1; + for (i = 0, j = 0; i < vidinfo->drawbuffer.height_allocated; i++, j += vidinfo->drawbuffer.rowbytes) { + row_map[i] = vidinfo->drawbuffer.bufmem + j; + if (init_genlock_data) { + row_map_genlock[i] = row_map_genlock_buffer + vidinfo->drawbuffer.width_allocated * (i + 1); } else { - c1 = c0; - } - } - if (vidinfo->drawbuffer.pixbytes == 4) { - uae_u32 *b = (uae_u32 *)xlinebuffer; - for (int i = start; i < stop; i++) { - int s = (i ^ vp) & 3; - if (brd) { - if (playfield_start_pre >= playfield_start && (i < playfield_start || i >= playfield_end)) { - if (s == 1) { - b[i] = xcolors[c2]; - } else if (s == 3) { - b[i] = xcolors[c1]; - } - } else if (i < playfield_start_pre || i >= playfield_end_pre) { - if (s == 1) { - b[i] = xcolors[c2]; - } else if (s == 3) { - b[i] = xcolors[c1]; - } - } - } else { - if (s == 1) { - b[i] = xcolors[c0]; - } else if (s == 3) { - b[i] = xcolors[c1]; - } - if (!trans) { - if (s == 0) { - b[i] = xcolors[c0]; - } else if (s == 2) { - b[i] = xcolors[c1]; - } - } - } + row_map_genlock[i] = NULL; } } + oldbufmem = vidinfo->drawbuffer.bufmem; + oldheight = vidinfo->drawbuffer.height_allocated; + oldpitch = vidinfo->drawbuffer.rowbytes; + oldgenlock = init_genlock_data; + oldburst = row_map_color_burst_buffer ? 1 : 0; } -static void fill_line2(int startpos, int len) +static void init_aspect_maps(void) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int shift; - int nints, nrem; - int *start; - xcolnr val; - - shift = 0; - if (vidinfo->drawbuffer.pixbytes == 2) - shift = 1; - if (vidinfo->drawbuffer.pixbytes == 4) - shift = 2; - - nints = len >> (2 - shift); - nrem = nints & 7; - nints &= ~7; - start = (int *)(((uae_u8*)xlinebuffer) + (startpos << shift)); - val = getbgc(0); - for (; nints > 0; nints -= 8, start += 8) { - *start = val; - *(start+1) = val; - *(start+2) = val; - *(start+3) = val; - *(start+4) = val; - *(start+5) = val; - *(start+6) = val; - *(start+7) = val; - } - - switch (nrem) { - case 7: - *start++ = val; - case 6: - *start++ = val; - case 5: - *start++ = val; - case 4: - *start++ = val; - case 3: - *start++ = val; - case 2: - *start++ = val; - case 1: - *start = val; + int i, maxl, h; + + linedbld = linedbl = currprefs.gfx_vresolution; + if (doublescan > 0 && interlace_seen <= 0) { + linedbl = 0; + linedbld = 1; } -} + maxl = (MAXVPOS + 1) << linedbld; + min_ypos_for_screen = minfirstline << linedbl; + max_drawn_amiga_line = -1; -static void fill_line_border(int lineno, int bordertype) -{ - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int lastpos = visible_left_border; - int endpos = visible_left_border + vidinfo->drawbuffer.inwidth; - int w = endpos - lastpos; + vidinfo->xchange = 1 << (RES_MAX - currprefs.gfx_resolution); + vidinfo->ychange = linedbl ? 1 : 2; - int hblank_left = exthblank ? hblank_left_start : hblank_left_start_hard; - int hblank_right = exthblank ? hblank_right_stop : hblank_right_stop_hard; + visible_left_start = 0; + visible_right_stop = MAX_STOP; + visible_top_start = 0; + visible_bottom_stop = MAX_STOP; - if (lineno < visible_top_start || lineno < vblank_top_start || lineno >= visible_bottom_stop || lineno >= vblank_bottom_stop || full_blank) { - int b = hposblank; - hposblank = 3; - fill_line2(lastpos, w); - if (syncdebug && bordertype >= 0) { - pfield_do_darken_line(lastpos, endpos, lineno); - } - if (need_genlock_data) { - memset(xlinebuffer_genlock + lastpos, get_genlock_transparency_border(), w); - } - hposblank = b; + h = vidinfo->drawbuffer.height_allocated; + if (h == 0) + /* Do nothing if the gfx driver hasn't initialized the screen yet */ return; - } - // full hblank - if (hposblank) { - hposblank = 3; - fill_line2(lastpos, w); - if (syncdebug && bordertype >= 0) { - pfield_do_darken_line(lastpos, endpos, lineno); - } - if (need_genlock_data) { - memset(xlinebuffer_genlock + lastpos, get_genlock_transparency_border(), w); - } - return; - } + if (native2amiga_line_map) + xfree (native2amiga_line_map); + if (amiga2aspect_line_map) + xfree (amiga2aspect_line_map); - // hblank not visible - if (hblank_left <= lastpos && hblank_right >= endpos) { - fill_line2(lastpos, w); - if (need_genlock_data) { - memset(xlinebuffer_genlock + lastpos, get_genlock_transparency_border(), w); - } - return; - } + /* At least for this array the +1 is necessary. */ + native2amiga_line_map_height = h; + amiga2aspect_line_map = xmalloc (int, (MAXVPOS + 1) * 2 + 1); + native2amiga_line_map = xmalloc (int, native2amiga_line_map_height); - // left, right or both hblanks visible - if (lastpos < hblank_left) { - int t = hblank_left < endpos ? hblank_left : endpos; - pfield_do_fill_line(lastpos, t, true); - lastpos = t; - } - if (lastpos < hblank_right) { - int t = hblank_right < endpos ? hblank_right : endpos; - pfield_do_fill_line(lastpos, t, false); - lastpos = t; + for (i = 0; i < maxl; i++) { + int v = i - min_ypos_for_screen; + if (v >= h && max_drawn_amiga_line < 0) + max_drawn_amiga_line = v; + if (i < min_ypos_for_screen || v >= native2amiga_line_map_height) + v = -1; + amiga2aspect_line_map[i] = v; } - if (lastpos < endpos) { - pfield_do_fill_line(lastpos, endpos, true); + if (max_drawn_amiga_line < 0) + max_drawn_amiga_line = maxl - min_ypos_for_screen; + + for (i = 0; i < native2amiga_line_map_height; i++) + native2amiga_line_map[i] = -1; + + for (i = maxl - 1; i >= min_ypos_for_screen; i--) { + int j; + if (amiga2aspect_line_map[i] == -1) + continue; + for (j = amiga2aspect_line_map[i]; j < native2amiga_line_map_height && native2amiga_line_map[j] == -1; j++) + native2amiga_line_map[j] = i >> linedbl; } } -static int sprite_shdelay; -#define SPRITE_DEBUG 0 -static uae_u8 render_sprites(int pos, int dualpf, uae_u8 apixel, int aga) +static void center_image (void) { - struct spritepixelsbuf *spb = &spritepixels[pos]; - unsigned int v = spb->data; - int *shift_lookup = dualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms; - int maskshift, plfmask; + struct amigadisplay *ad = &adisplays[0]; + struct gfx_filterdata *fd = &currprefs.gf[ad->gf_index]; + struct vidbuf_description *vidinfo = &ad->gfxvidinfo; + int prev_x_adjust = visible_left_border; + int prev_y_adjust = thisframe_y_adjust; - if (!sprite_visibility) { - return 0; - } + int w = vidinfo->drawbuffer.inwidth; + int ew = vidinfo->drawbuffer.extrawidth; + int maxdiw = max_diwlastword; - // If 64 pixel wide sprite and FMODE gets lowered when sprite's - // first 32 pixels are being drawn: matching pixel(s) in second - // 32 pixel part gets blanked. - if (aga && spb->stfmdata && sprite_smaller_than_64_inuse && sprite_smaller_than_64) { - spb[32 << currprefs.gfx_resolution].data &= ~spb->stfmdata; - } + if (currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN && currprefs.gfx_xcenter && !fd->gfx_filter_autoscale && max_diwstop > 0) { - // shdelay hack, above &spritepixels[pos] is correct. - pos += sprite_shdelay; - /* The value in the shift lookup table is _half_ the shift count we - need. This is because we can't shift 32 bits at once (undefined - behaviour in C). */ - maskshift = shift_lookup[apixel]; - plfmask = (plf_sprite_mask >> maskshift) >> maskshift; - v &= ~plfmask; - /* Extra 1 sprite pixel at DDFSTRT is only possible if at least 1 plane is active */ - if (pos >= sprite_playfield_start && pos < sprite_end && (v != 0 || SPRITE_DEBUG)) { - unsigned int vlo, vhi, col; - unsigned int v1 = v & 255; - /* OFFS determines the sprite pair with the highest priority that has - any bits set. E.g. if we have 0xFF00 in the buffer, we have sprite - pairs 01 and 23 cleared, and pairs 45 and 67 set, so OFFS will - have a value of 4. - 2 * OFFS is the bit number in V of the sprite pair, and it also - happens to be the color offset for that pair. - */ - int offs; - if (v1 == 0) - offs = 4 + sprite_offs[v >> 8]; + if (max_diwstop - min_diwstart < w && currprefs.gfx_xcenter == 2) + /* Try to center. */ + visible_left_border = (max_diwstop - min_diwstart - w) / 2 + min_diwstart; else - offs = sprite_offs[v1]; + visible_left_border = max_diwstop - w - (max_diwstop - min_diwstart - w) / 2; + visible_left_border &= ~((xshift(1, lores_shift)) - 1); - /* Shift highest priority sprite pair down to bit zero. */ - v >>= offs * 2; - v &= 15; -#if SPRITE_DEBUG > 0 - v ^= 8; -#endif - if ((spb->flags & 1) && (spb->stdata & (3 << offs))) { - col = v; - if (aga) - col += sbasecol[1]; - else - col += 16; - } else { - /* This sequence computes the correct color value. We have to select - either the lower-numbered or the higher-numbered sprite in the pair. - We have to select the high one if the low one has all bits zero. - If the lower-numbered sprite has any bits nonzero, (VLO - 1) is in - the range of 0..2, and with the mask and shift, VHI will be zero. - If the lower-numbered sprite is zero, (VLO - 1) is a mask of - 0xFFFFFFFF, and we select the bits of the higher numbered sprite - in VHI. - This is _probably_ more efficient than doing it with branches. */ - vlo = v & 3; - vhi = (v & (vlo - 1)) >> 2; - col = (vlo | vhi); - if (aga) { - if (vhi > 0) - col += sbasecol[1]; - else - col += sbasecol[0]; - } else { - col += 16; + if (!center_reset && !vertical_changed) { + /* Would the old value be good enough? If so, leave it as it is if we want to be clever. */ + if (currprefs.gfx_xcenter == 2) { + if (visible_left_border < prev_x_adjust && prev_x_adjust < min_diwstart && min_diwstart - visible_left_border <= 32) + visible_left_border = prev_x_adjust; } - col += offs * 2; } -#if SPRITE_DEBUG_HIDE - col = 0; -#endif - return col; + } else if (ew == -1) { + // wide mode + int hs = 0; + visible_left_border = hs << currprefs.gfx_resolution; + if (visible_left_border + w > maxdiw) { + visible_left_border += (maxdiw - (visible_left_border + w) - 1) / 2; + } + if (visible_left_border < (hs << currprefs.gfx_resolution)) { + visible_left_border = hs << currprefs.gfx_resolution; + } + } else if (ew < -1) { + // normal + visible_left_border = maxdiw - w; + } else { + if (vidinfo->drawbuffer.inxoffset < 0) { + visible_left_border = 0; + } else { + visible_left_border = vidinfo->drawbuffer.inxoffset << currprefs.gfx_resolution; + } } - return 0; -} + if (visible_left_border > max_diwlastword - 32) + visible_left_border = max_diwlastword - 32; + //if (visible_left_border < 0) + visible_left_border = 0; + visible_left_border &= ~((xshift (1, lores_shift)) - 1); -#include "linetoscr.cpp" + //write_log (_T("%d %d %d %d %d\n"), max_diwlastword, vidinfo->drawbuffer.width, lores_shift, currprefs.gfx_resolution, visible_left_border); -#define LTPARMS src_pixel, start, stop + linetoscr_x_adjust_pixels = visible_left_border; + linetoscr_x_adjust_pixbytes = linetoscr_x_adjust_pixels * vidinfo->drawbuffer.pixbytes; -#ifdef ECS_DENISE -/* ECS SuperHires special cases */ + visible_right_border = maxdiw + w + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution); + if (visible_right_border > maxdiw + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution)) + visible_right_border = maxdiw + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution); -#define PUTBPIX(x) buf[dpix] = (x); + int max_drawn_amiga_line_tmp = max_drawn_amiga_line; + if (max_drawn_amiga_line_tmp > vidinfo->drawbuffer.inheight) + max_drawn_amiga_line_tmp = vidinfo->drawbuffer.inheight; + max_drawn_amiga_line_tmp >>= linedbl; + + thisframe_y_adjust = minfirstline - 1; + if (currprefs.gfx_ycenter && !fd->gfx_filter_autoscale) { -static uae_u8 sh_render_sprites(int pos, int dualpf, uae_u8 apixel, int aga) -{ - struct spritepixelsbuf *spb = &spritepixels[pos]; - unsigned int v = spb->data; - int *shift_lookup = dualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms; - int maskshift, plfmask; + if (thisframe_first_drawn_line >= 0 && thisframe_last_drawn_line > thisframe_first_drawn_line) { - if (exthblank || exthblank_force) { - return 0; - } - if (extborder && ce_is_borderblank(colors_for_drawing.extra)) { - return 0; - } + if (thisframe_last_drawn_line - thisframe_first_drawn_line < max_drawn_amiga_line_tmp && currprefs.gfx_ycenter == 2) + thisframe_y_adjust = (thisframe_last_drawn_line - thisframe_first_drawn_line - max_drawn_amiga_line_tmp) / 2 + thisframe_first_drawn_line; + else + thisframe_y_adjust = thisframe_first_drawn_line; + + /* Would the old value be good enough? If so, leave it as it is if we want to be clever. */ + if (!center_reset && !horizontal_changed) { + if (currprefs.gfx_ycenter == 2 && thisframe_y_adjust != prev_y_adjust && abs(thisframe_y_adjust - prev_y_adjust) < 100) { + if (prev_y_adjust <= thisframe_first_drawn_line && prev_y_adjust + max_drawn_amiga_line_tmp > thisframe_last_drawn_line) + thisframe_y_adjust = prev_y_adjust; + } + } + + } else { + + center_reset = 2; - maskshift = shift_lookup[apixel]; - plfmask = (plf_sprite_mask >> maskshift) >> maskshift; - v &= ~plfmask; - if (pos >= sprite_playfield_start && pos < sprite_end && v != 0) { - uae_u32 col; - uae_u32 v1 = v & 255; - int offs; - if (v1 == 0) - offs = 4 + sprite_offs[v >> 8]; - else - offs = sprite_offs[v1]; - v >>= offs * 2; - v &= 15; - col = (v >> 0) & 3; - if (!col) { - col = (v >> 2) & 3; - } - // not correct - if ((spb->flags & 1) && (spb->stdata & (3 << offs))) { - int col1 = (v >> 0) & 3; - int col2 = (v >> 2) & 3; - col = col1 | col2; } - return col; } - return 0; -} -static uae_u32 shsprite(int dpix, uae_u32 spix_val, uae_u32 v, int add, int spr) -{ - uae_u8 sprcol1, sprcol2, off; - uae_u16 scol; - if (!spr) { - return v; - } - dpix &= ~1; - struct spritepixelsbuf *spb = &spritepixels[dpix]; - int sdpix = dpix; - if (spb->flags & 2) { - sdpix -= add >> 1; + /* Make sure the value makes sense */ + if (thisframe_y_adjust + max_drawn_amiga_line_tmp > maxvpos + maxvpos / 2) + thisframe_y_adjust = maxvpos + maxvpos / 2 - max_drawn_amiga_line_tmp; + if (thisframe_y_adjust < 0) + thisframe_y_adjust = 0; + + thisframe_y_adjust_real = thisframe_y_adjust << linedbl; + max_ypos_thisframe1 = (maxvpos_display - minfirstline + maxvpos_display_vsync) << linedbl; + + if (prev_x_adjust != visible_left_border || prev_y_adjust != thisframe_y_adjust) { + int redraw = interlace_seen > 0 && linedbl ? 2 : 1; + if (redraw > ad->frame_redraw_necessary) + ad->frame_redraw_necessary = redraw; } - int mask = 3; - sprcol1 = sh_render_sprites(sdpix, bpldualpf, spix_val, 0); - sprcol2 = sh_render_sprites(sdpix + add, bpldualpf, spix_val, 0); - off = (sprcol2 & mask) * 4 + (sprcol1 & mask) + 16; - if ((dpix & add)) { - if (!(sprcol2 & mask)) { - return v; - } - scol = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - } else { - if (!(sprcol1 & mask)) { - return v; - } - scol = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; + + max_diwstop = 0; + min_diwstart = MAX_STOP; + + vidinfo->drawbuffer.xoffset = visible_left_border << (RES_MAX - currprefs.gfx_resolution); + vidinfo->drawbuffer.yoffset = thisframe_y_adjust << VRES_MAX; + + if (center_reset > 0) { + center_reset--; } - scol |= scol >> 2; - return xcolors[scol]; + horizontal_changed = false; + vertical_changed = false; } -static int NOINLINE linetoscr_32_sh_func(int spix, int dpix, int stoppos, int spr) +static int frame_res_cnt; +static int autoswitch_old_resolution; +static void init_drawing_frame(void) { - uae_u32 *buf = (uae_u32 *)xlinebuffer; + struct amigadisplay *ad = &adisplays[0]; + struct vidbuf_description *vidinfo = &ad->gfxvidinfo; + static int frame_res_old; - while (dpix < stoppos) { - uae_u32 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite(dpix, spix_val1, xcolors[v], 2, spr)); - dpix++; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - PUTBPIX(shsprite(dpix, spix_val2, xcolors[v], 2, spr)); - dpix++; + int largest_res = 0; + int largest_count = 0; + int largest_count_res = 0; + for (int i = 0; i <= RES_MAX; i++) { + if (resolution_count[i]) + largest_res = i; + if (resolution_count[i] >= largest_count) { + largest_count = resolution_count[i]; + largest_count_res = i; + } + } + if (currprefs.gfx_resolution == changed_prefs.gfx_resolution && lines_count > 0) { + detected_screen_resolution = largest_res; } - return spix; -} -static int linetoscr_32_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_32_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_32_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_32_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_16_sh_func(int spix, int dpix, int stoppos, int spr) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; + if (currprefs.gfx_resolution == changed_prefs.gfx_resolution && lines_count > 0) { - while (dpix < stoppos) { - uae_u16 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], 2, spr)); - dpix++; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val2, xcolors[v], 2, spr)); - dpix++; + if (currprefs.gfx_autoresolution_vga && programmedmode == 1 && vidinfo->gfx_resolution_reserved >= RES_HIRES && vidinfo->gfx_vresolution_reserved >= VRES_DOUBLE) { + if (largest_res == RES_SUPERHIRES && (vidinfo->gfx_resolution_reserved < RES_SUPERHIRES || vidinfo->gfx_vresolution_reserved < 1)) { + // enable full doubling/superhires support if programmed mode. It may be "half-width" only and may fit in normal display window. + vidinfo->gfx_resolution_reserved = RES_SUPERHIRES; + vidinfo->gfx_vresolution_reserved = VRES_DOUBLE; + graphics_reset(false); + } + int newres = RES_HIRES; + int hres = (2 * htotal) << largest_res; + if (hres > 1150) { + newres = RES_SUPERHIRES; + } else { + newres = RES_HIRES; + } + if (newres < RES_HIRES) { + newres = RES_HIRES; + } + if (newres > RES_MAX) { + newres = RES_MAX; + } + if (changed_prefs.gfx_resolution != newres) { + autoswitch_old_resolution = RES_HIRES; + write_log(_T("Programmed mode autores = %d -> %d (%d)\n"), changed_prefs.gfx_resolution, newres, largest_res); + changed_prefs.gfx_resolution = newres; + set_config_changed(); + return; + } + } else if (autoswitch_old_resolution == RES_HIRES) { + autoswitch_old_resolution = 0; + if (changed_prefs.gfx_resolution != RES_HIRES) { + changed_prefs.gfx_resolution = RES_HIRES; + set_config_changed(); + return; + } + } + + if (currprefs.gfx_autoresolution) { + int frame_res_detected; + int frame_res_lace_detected = frame_res_lace; + + if (currprefs.gfx_autoresolution == 1 || currprefs.gfx_autoresolution >= 100) + frame_res_detected = largest_res; + else if (largest_count * 100 / lines_count >= currprefs.gfx_autoresolution) + frame_res_detected = largest_count_res; + else + frame_res_detected = largest_count_res - 1; + if (frame_res_detected < 0) + frame_res_detected = 0; + #if 0 + static int delay; + delay--; + if (delay < 0) { + delay = 50; + write_log (_T("%d %d, %d %d %d, %d %d, %d %d\n"), currprefs.gfx_autoresolution, lines_count, resolution_count[0], resolution_count[1], resolution_count[2], + largest_count, largest_count_res, frame_res_detected, frame_res_lace_detected); + } + #endif + if (frame_res_detected >= 0 && frame_res_lace_detected >= 0) { + if (frame_res_cnt > 0 && frame_res_old == frame_res_detected * 2 + frame_res_lace_detected) { + frame_res_cnt--; + if (frame_res_cnt == 0) { + int m = frame_res_detected * 2 + frame_res_lace_detected; + struct wh *dst = currprefs.gfx_apmode[0].gfx_fullscreen ? &changed_prefs.gfx_monitor[0].gfx_size_fs : &changed_prefs.gfx_monitor[0].gfx_size_win; + struct wh *src = currprefs.gfx_apmode[0].gfx_fullscreen ? &currprefs.gfx_monitor[0].gfx_size_fs_xtra[m] : &currprefs.gfx_monitor[0].gfx_size_win_xtra[m]; + int nr = m >> 1; + int nl = (m & 1) == 0 ? 0 : 1; + int nr_o = nr; + int nl_o = nl; + + if (currprefs.gfx_autoresolution >= 100 && nl == 0 && nr > 0) { + nl = 1; + } + if (currprefs.gfx_autoresolution_minh < 0) { + if (nr < nl) + nr = nl; + } else if (nr < currprefs.gfx_autoresolution_minh) { + nr = currprefs.gfx_autoresolution_minh; + } + if (currprefs.gfx_autoresolution_minv < 0) { + if (nl < nr) + nl = nr; + } else if (nl < currprefs.gfx_autoresolution_minv) { + nl = currprefs.gfx_autoresolution_minv; + } + + if (nr > vidinfo->gfx_resolution_reserved) + nr = vidinfo->gfx_resolution_reserved; + if (nl > vidinfo->gfx_vresolution_reserved) + nl = vidinfo->gfx_vresolution_reserved; + + if (changed_prefs.gfx_resolution != nr || changed_prefs.gfx_vresolution != nl) { + changed_prefs.gfx_resolution = nr; + changed_prefs.gfx_vresolution = nl; + + write_log(_T("RES -> %d (%d) LINE -> %d (%d) (%d - %d, %d - %d)\n"), nr, nr_o, nl, nl_o, + currprefs.gfx_autoresolution_minh, currprefs.gfx_autoresolution_minv, + vidinfo->gfx_resolution_reserved, vidinfo->gfx_vresolution_reserved); + set_config_changed(); + } + if (src->width > 0 && src->height > 0) { + if (memcmp(dst, src, sizeof(*dst))) { + *dst = *src; + set_config_changed(); + } + } + frame_res_cnt = currprefs.gfx_autoresolution_delay; + } + } else { + frame_res_old = frame_res_detected * 2 + frame_res_lace_detected; + frame_res_cnt = currprefs.gfx_autoresolution_delay; + if (frame_res_cnt <= 0) + frame_res_cnt = 1; + } + } + } } - return spix; -} -static int linetoscr_16_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_16_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_16_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_16_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_32_shrink1_sh_func(int spix, int dpix, int stoppos, int spr) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; + for (int i = 0; i <= RES_MAX; i++) { + resolution_count[i] = 0; + } + lines_count = 0; + frame_res = -1; + frame_res_lace = 0; - while (dpix < stoppos) { - uae_u32 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], 1, spr)); - dpix++; + if (can_use_lores > AUTO_LORES_FRAMES && 0) { + lores_factor = 1; + //lores_set(0); + } else { + can_use_lores++; + //lores_reset(); } - return spix; -} -static int linetoscr_32_shrink1_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink1_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_32_shrink1_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink1_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_32_shrink1f_sh_func(int spix, int dpix, int stoppos, int spr) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - while (dpix < stoppos) { - uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val1, dpix_val2), 1, spr)); - dpix++; + if (thisframe_first_drawn_line < 0) + thisframe_first_drawn_line = minfirstline; + if (thisframe_first_drawn_line > thisframe_last_drawn_line) + thisframe_last_drawn_line = thisframe_first_drawn_line; + + int maxline = ((maxvpos_display + maxvpos_display_vsync + 1) << linedbl) + 2; + + last_drawn_line = 0; + first_drawn_line = 32767; + + if (ad->frame_redraw_necessary) { + ad->custom_frame_redraw_necessary = 1; + ad->frame_redraw_necessary--; + } else { + ad->custom_frame_redraw_necessary = 0; } - return spix; -} -static int linetoscr_32_shrink1f_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink1f_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_32_shrink1f_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink1f_sh_func(spix, dpix, stoppos, false); + + center_image (); + + thisframe_first_drawn_line = -1; + thisframe_last_drawn_line = -1; } -static int NOINLINE linetoscr_16_shrink1_sh_func(int spix, int dpix, int stoppos, int spr) + +static int lightpen_y1[2], lightpen_y2[2]; + +void putpixel(uae_u8 *buf, uae_u16 *genlockbuf, int bpp, int x, xcolnr c8) { - uae_u16 *buf = (uae_u16 *) xlinebuffer; + if (x <= 0) + return; - while (dpix < stoppos) { - uae_u16 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], 1, spr)); - dpix++; + if (genlockbuf) + genlockbuf[x] = 0xffff; + + switch (bpp) { + case 1: + buf[x] = (uae_u8)c8; + break; + case 2: + { + uae_u16 *p = (uae_u16*)buf + x; + *p = (uae_u16)c8; + break; + } + case 3: + /* no 24 bit yet */ + break; + case 4: + { + uae_u32 *p = (uae_u32*)buf + x; + *p = c8; + break; + } } - return spix; } -static int linetoscr_16_shrink1_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_16_shrink1_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_16_shrink1_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_16_shrink1_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_16_shrink1f_sh_func(int spix, int dpix, int stoppos, int spr) + +static uae_u8 *status_line_ptr(int monid, int line) { - uae_u16 *buf = (uae_u16 *) xlinebuffer; + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + int y; - while (dpix < stoppos) { - uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val1, dpix_val2), 1, spr)); - dpix++; - } - return spix; + y = line - (vidinfo->drawbuffer.outheight - TD_TOTAL_HEIGHT); + xlinebuffer = vidinfo->drawbuffer.linemem; + if (xlinebuffer == 0) + xlinebuffer = row_map[line]; + xlinebuffer_genlock = row_map_genlock[line]; + return xlinebuffer; } -static int linetoscr_16_shrink1f_sh_spr(int spix, int dpix, int stoppos) + +static void draw_status_line(int monid, int line, int statusy) { - return linetoscr_16_shrink1f_sh_func(spix, dpix, stoppos, true); + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + uae_u8 *buf = status_line_ptr(monid, line); + if (!buf) + return; + if (statusy < 0) + statusline_render(monid, buf, vidinfo->drawbuffer.pixbytes, vidinfo->drawbuffer.rowbytes, vidinfo->drawbuffer.outwidth, TD_TOTAL_HEIGHT, xredcolors, xgreencolors, xbluecolors, NULL); + else + draw_status_line_single(monid, buf, vidinfo->drawbuffer.pixbytes, statusy, vidinfo->drawbuffer.outwidth, xredcolors, xgreencolors, xbluecolors, NULL); } -static int linetoscr_16_shrink1f_sh(int spix, int dpix, int stoppos) + +static void draw_debug_status_line(int monid, int line) { - return linetoscr_16_shrink1f_sh_func(spix, dpix, stoppos, false); + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + xlinebuffer = vidinfo->drawbuffer.linemem; + if (xlinebuffer == 0) + xlinebuffer = row_map[line]; + xlinebuffer_genlock = row_map_genlock[line]; + debug_draw(xlinebuffer, vidinfo->drawbuffer.pixbytes, line, vidinfo->drawbuffer.outwidth, vidinfo->drawbuffer.outheight, xredcolors, xgreencolors, xbluecolors); } -static int NOINLINE linetoscr_32_shrink2_sh_func(int spix, int dpix, int stoppos, int spr) + +#define LIGHTPEN_HEIGHT 12 +#define LIGHTPEN_WIDTH 17 + +static const char *lightpen_cursor = { + "------.....------" + "------.xxx.------" + "------.xxx.------" + "------.xxx.------" + ".......xxx......." + ".xxxxxxxxxxxxxxx." + ".xxxxxxxxxxxxxxx." + ".......xxx......." + "------.xxx.------" + "------.xxx.------" + "------.xxx.------" + "------.....------" +}; + +static void draw_lightpen_cursor(int monid, int x, int y, int line, int onscreen, int lpnum) { - uae_u32 *buf = (uae_u32 *) xlinebuffer; + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + const char *p; + int color1 = onscreen ? (lpnum ? 0x0ff : 0xff0) : (lpnum ? 0x0f0 : 0xf00); + int color2 = (color1 & 0xeee) >> 1; - while (dpix < stoppos) { - uae_u32 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], 1, spr)); - spix+=2; - dpix++; + xlinebuffer = vidinfo->drawbuffer.linemem; + if (xlinebuffer == 0) + xlinebuffer = row_map[line]; + xlinebuffer_genlock = row_map_genlock[line]; + + p = lightpen_cursor + y * LIGHTPEN_WIDTH; + for (int i = 0; i < LIGHTPEN_WIDTH; i++) { + int xx = x + i - LIGHTPEN_WIDTH / 2; + if (*p != '-' && xx >= 0 && xx < vidinfo->drawbuffer.outwidth) { + putpixel(xlinebuffer, xlinebuffer_genlock, vidinfo->drawbuffer.pixbytes, xx, *p == 'x' ? xcolors[color1] : xcolors[color2]); + } + p++; } - return spix; -} -static int linetoscr_32_shrink2_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink2_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_32_shrink2_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink2_sh_func(spix, dpix, stoppos, false); } -static int NOINLINE linetoscr_32_shrink2f_sh_func(int spix, int dpix, int stoppos, int spr) + +static void lightpen_update(struct vidbuffer *vb, int lpnum) { - uae_u32 *buf = (uae_u32 *) xlinebuffer; + struct vidbuf_description *vidinfo = &adisplays[vb->monitor_id].gfxvidinfo; + if (lightpen_x[lpnum] < 0 && lightpen_y[lpnum] < 0) + return; - while (dpix < stoppos) { - uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); - PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val3, dpix_val4), 1, spr)); - dpix++; + bool out = false; + int extra = 2; + + if (lightpen_x[lpnum] < -extra) + lightpen_x[lpnum] = -extra; + if (lightpen_x[lpnum] >= vidinfo->drawbuffer.inwidth + extra) + lightpen_x[lpnum] = vidinfo->drawbuffer.inwidth + extra; + if (lightpen_y[lpnum] < -extra) + lightpen_y[lpnum] = -extra; + if (lightpen_y[lpnum] >= vidinfo->drawbuffer.inheight + extra) + lightpen_y[lpnum] = vidinfo->drawbuffer.inheight + extra; + if (lightpen_y[lpnum] >= max_ypos_thisframe1) + lightpen_y[lpnum] = max_ypos_thisframe1; + + if (lightpen_x[lpnum] < 0 || lightpen_y[lpnum] < 0) { + out = true; + } + if (lightpen_x[lpnum] >= vidinfo->drawbuffer.inwidth) { + out = true; + } + if (lightpen_y[lpnum] >= max_ypos_thisframe1) { + out = true; } - return spix; -} -static int linetoscr_32_shrink2f_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink2f_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_32_shrink2f_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_32_shrink2f_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_16_shrink2_sh_func(int spix, int dpix, int stoppos, int spr) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - while (dpix < stoppos) { - uae_u16 spix_val1, spix_val2; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], 1, spr)); - spix+=2; - dpix++; + int cx = (((lightpen_x[lpnum] + visible_left_border) >> lores_shift) >> 1) + 29; + + int cy = lightpen_y[lpnum]; + cy >>= linedbl; + cy += minfirstline; + + cx += currprefs.lightpen_offset[0]; + cy += currprefs.lightpen_offset[1]; + + if (cx <= 0x18 - 1) { + cx = 0x18 - 1; + out = true; + } + if (cy <= minfirstline_linear - 1) { + cy = minfirstline_linear - 1; + out = true; + } + if (cy >= current_linear_vpos) { + cy = current_linear_vpos; + out = true; } - return spix; -} -static int linetoscr_16_shrink2_sh_spr(int spix, int dpix, int stoppos) -{ - return linetoscr_16_shrink2_sh_func(spix, dpix, stoppos, true); -} -static int linetoscr_16_shrink2_sh(int spix, int dpix, int stoppos) -{ - return linetoscr_16_shrink2_sh_func(spix, dpix, stoppos, false); -} -static int NOINLINE linetoscr_16_shrink2f_sh_func (int spix, int dpix, int stoppos, int spr) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - while (dpix < stoppos) { - uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; - uae_u16 v; - int off; - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); - spix_val1 = pixdata.apixels[spix++]; - spix_val2 = pixdata.apixels[spix++]; - off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); - v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; - v |= v >> 2; - dpix_val1 = xcolors[v]; - v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; - v |= v >> 2; - dpix_val2 = xcolors[v]; - dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); - PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val3, dpix_val4), 1, spr)); - dpix++; + if (currprefs.lightpen_crosshair && lightpen_active) { + for (int i = 0; i < LIGHTPEN_HEIGHT; i++) { + int line = lightpen_y[lpnum] + i - LIGHTPEN_HEIGHT / 2; + if (line >= 0 && line < max_ypos_thisframe1) { + if (lightpen_active & (1 << lpnum)) { + draw_lightpen_cursor(vb->monitor_id, lightpen_x[lpnum], i, line, cx > 0, lpnum); + } + } + } } - return spix; + + lightpen_y1[lpnum] = lightpen_y[lpnum] - LIGHTPEN_HEIGHT / 2 - 1 + thisframe_y_adjust; + lightpen_y2[lpnum] = lightpen_y1[lpnum] + LIGHTPEN_HEIGHT + 1 + thisframe_y_adjust; + + lightpen_cx[lpnum] = out ? -1 : cx; + lightpen_cy[lpnum] = out ? -1 : cy; } -static int linetoscr_16_shrink2f_sh_spr(int spix, int dpix, int stoppos) + +static void refresh_indicator_init(void) { - return linetoscr_16_shrink2f_sh_func(spix, dpix, stoppos, true); + xfree(refresh_indicator_buffer); + refresh_indicator_buffer = NULL; + xfree(refresh_indicator_changed); + refresh_indicator_changed = NULL; + xfree(refresh_indicator_changed_prev); + refresh_indicator_changed_prev = NULL; + + if (!currprefs.refresh_indicator) + return; + + refresh_indicator_height = 600; + refresh_indicator_buffer = xcalloc(uae_u8, MAX_PIXELS_PER_LINE * 2 * refresh_indicator_height); + refresh_indicator_changed = xcalloc(uae_u8, refresh_indicator_height); + refresh_indicator_changed_prev = xcalloc(uae_u8, refresh_indicator_height); } -static int linetoscr_16_shrink2f_sh(int spix, int dpix, int stoppos) + +static const int refresh_indicator_colors[] = { 0x777, 0x0f0, 0x00f, 0xff0, 0xf0f }; + +static void refresh_indicator_update(struct vidbuffer *vb) { - return linetoscr_16_shrink2f_sh_func(spix, dpix, stoppos, false); -} -#endif + struct vidbuf_description *vidinfo = &adisplays[vb->monitor_id].gfxvidinfo; + for (int i = 0; i < max_ypos_thisframe1; i++) { + int i1 = i + min_ypos_for_screen; + int line = i + thisframe_y_adjust_real; + int whereline = amiga2aspect_line_map[i1]; + int wherenext = amiga2aspect_line_map[i1 + 1]; -typedef int(*call_linetoscr)(int spix, int dpix, int dpix_end); -typedef int(*call_linetoscrb)(int spix, int dpix, int dpix_end, int blank); + if (whereline >= vb->inheight) + break; + if (whereline < 0) + continue; + if (line >= refresh_indicator_height) + break; -static call_linetoscr pfield_do_linetoscr_normal, pfield_do_linetoscr_normal2; -static call_linetoscr pfield_do_linetoscr_sprite, pfield_do_linetoscr_sprite2; -static call_linetoscrb pfield_do_linetoscr_spriteonly; + xlinebuffer = row_map[whereline]; + uae_u8 pixel = refresh_indicator_changed_prev[line]; + if (wherenext >= 0) { + pixel = refresh_indicator_changed_prev[line & ~1]; + } -static void pfield_do_linetoscr(int start, int stop, int blank) -{ - int pixel = pfield_do_linetoscr_normal(src_pixel, start, stop); - if (exthblank || exthblank_force) { - pfield_do_fill_line(start, stop, 1); - } else if (extborder) { -#if EXTBORDER_BLANK - bool bb = true; -#else - bool bb = ce_is_borderblank(colors_for_drawing.extra); -#endif - pfield_do_fill_line(start, stop, bb ? 1 : 0); + int color1 = 0; + int color2 = 0; + if (pixel <= 4) { + color1 = color2 = refresh_indicator_colors[pixel]; + } else if (pixel <= 8) { + color2 = refresh_indicator_colors[pixel - 5]; + } + for (int x = 0; x < 8; x++) { + putpixel(xlinebuffer, NULL, vidinfo->drawbuffer.pixbytes, x, xcolors[color1]); + } + for (int x = 8; x < 16; x++) { + putpixel(xlinebuffer, NULL, vidinfo->drawbuffer.pixbytes, x, xcolors[color2]); + } } - src_pixel = pixel; } -static void pfield_do_linetoscr_spr(int start, int stop, int blank) + +static void draw_frame_extras(struct vidbuffer *vb, int y_start, int y_end) { - int pixel; - if (extborder) { -#if EXTBORDER_BLANK - bool bb = true; -#else - bool bb = ce_is_borderblank(colors_for_drawing.extra); -#endif - pixel = pfield_do_linetoscr_sprite(src_pixel, start, stop); - pfield_do_fill_line(start, stop, bb || exthblank > 0 || exthblank_force); - } else { - pixel = pfield_do_linetoscr_sprite(src_pixel, start, stop); - if (exthblank || exthblank_force) { - pfield_do_fill_line(start, stop, 1); + if (debug_dma > 1 || debug_heatmap > 1) { + for (int i = 0; i < vb->outheight; i++) { + int line = i; + draw_debug_status_line(vb->monitor_id, line); } } - src_pixel = pixel; -} -static int pfield_do_nothing(int a, int b, int c) -{ - return a; -} -static int pfield_do_nothingb(int a, int b, int c, int d) -{ - return a; + + if (lightpen_active) { + if (lightpen_active & 1) { + lightpen_update(vb, 0); + } + if (inputdevice_get_lightpen_id() >= 0 && (lightpen_active & 2)) { + lightpen_update(vb, 1); + } + } + if (refresh_indicator_buffer) + refresh_indicator_update(vb); } -/* AGA subpixel delay hack */ -static call_linetoscr pfield_do_linetoscr_shdelay_normal; -static call_linetoscr pfield_do_linetoscr_shdelay_sprite; +extern bool beamracer_debug; -static int pfield_do_linetoscr_normal_shdelay(int spix, int dpix, int dpix_end) +static void setnativeposition(struct vidbuffer *vb) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int add = get_shdelay_add(); - int add2 = add * vidinfo->drawbuffer.pixbytes; - if (add) { - // Fill skipped pixel(s). - pfield_do_linetoscr_shdelay_sprite(spix - 1, dpix, dpix + add); - } - xlinebuffer += add2; - int out = pfield_do_linetoscr_shdelay_normal(spix, dpix, dpix_end); - xlinebuffer -= add2; - return out; + vb->inwidth = vidinfo->drawbuffer.inwidth; + vb->inheight = vidinfo->drawbuffer.inheight; + vb->inwidth2 = vidinfo->drawbuffer.inwidth2; + vb->inheight2 = vidinfo->drawbuffer.inheight2; + vb->outwidth = vidinfo->drawbuffer.outwidth; + vb->outheight = vidinfo->drawbuffer.outheight; } -static int pfield_do_linetoscr_sprite_shdelay(int spix, int dpix, int dpix_end) + +static void setspecialmonitorpos(struct vidbuffer *vb) { struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int out = spix; - if (dpix < real_playfield_start && dpix_end > real_playfield_start) { - // Crosses real_playfield_start. - // Render only from dpix to real_playfield_start. - int len = real_playfield_start - dpix; - out = pfield_do_linetoscr_spriteonly(out, dpix, dpix + len, false); - dpix = real_playfield_start; - } else if (dpix_end <= real_playfield_start) { - // Does not cross real_playfield_start, nothing special needed. - out = pfield_do_linetoscr_spriteonly(out, dpix, dpix_end, false); - return out; - } - // Render bitplane with subpixel scroll, from real_playfield_start to end. - int add = get_shdelay_add(); - int add2 = add * vidinfo->drawbuffer.pixbytes; - if (add) { - pfield_do_linetoscr_shdelay_sprite(out - 1, dpix, dpix + add); - } - sprite_shdelay = add; - spritepixels += add; - xlinebuffer += add2; - out = pfield_do_linetoscr_shdelay_sprite(out, dpix, dpix_end); - xlinebuffer -= add2; - spritepixels -= add; - sprite_shdelay = 0; - return out; -} - -static void pfield_set_linetoscr (void) + vb->extrawidth = vidinfo->drawbuffer.extrawidth; + vb->xoffset = vidinfo->drawbuffer.xoffset; + vb->yoffset = vidinfo->drawbuffer.yoffset; + vb->inxoffset = vidinfo->drawbuffer.inxoffset; + vb->inyoffset = vidinfo->drawbuffer.inyoffset; +} + +static void finish_drawing_frame(bool drawlines) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - xlinecheck(start, stop); - p_acolors = colors_for_drawing.acolors; - p_xcolors = xcolors; - bpland = 0xff; - if (bplbypass) { - p_acolors = direct_colors_for_drawing.acolors; - } - spritepixels = spritepixels_buffer; - pfield_do_linetoscr_spriteonly = pfield_do_nothingb; -#ifdef AGA - if (aga_mode) { - if (res_shift == 0) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_aga_genlock : linetoscr_16_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_aga_spr_genlock : linetoscr_16_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_aga_genlock : linetoscr_32_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_aga_spr_genlock : linetoscr_32_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_aga_spronly; - break; - } - } else if (res_shift == 2) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch2_aga_genlock : linetoscr_16_stretch2_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_aga_spr_genlock : linetoscr_16_stretch2_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_stretch2_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_stretch2_aga_genlock : linetoscr_32_stretch2_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_stretch2_aga_spr_genlock : linetoscr_32_stretch2_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_stretch2_aga_spronly; - break; - } - } else if (res_shift == 1) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch1_aga_genlock : linetoscr_16_stretch1_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch1_aga_spr_genlock : linetoscr_16_stretch1_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_stretch1_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_stretch1_aga_genlock : linetoscr_32_stretch1_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_stretch1_aga_spr_genlock : linetoscr_32_stretch1_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_stretch1_aga_spronly; - break; - } - } else if (res_shift == -1) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink1f_aga_genlock : linetoscr_16_shrink1f_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink1f_aga_spr_genlock : linetoscr_16_shrink1f_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink1f_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink1f_aga_genlock : linetoscr_32_shrink1f_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink1f_aga_spr_genlock : linetoscr_32_shrink1f_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink1f_aga_spronly; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink1_aga_genlock : linetoscr_16_shrink1_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink1_aga_spr_genlock : linetoscr_16_shrink1_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink1_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink1_aga_genlock : linetoscr_32_shrink1_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink1_aga_spr_genlock : linetoscr_32_shrink1_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink1_aga_spronly; - break; - } - } - } else if (res_shift == -2) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink2f_aga_genlock : linetoscr_16_shrink2f_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink2f_aga_spr_genlock : linetoscr_16_shrink2f_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink2f_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink2f_aga_genlock : linetoscr_32_shrink2f_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink2f_aga_spr_genlock : linetoscr_32_shrink2f_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink2f_aga_spronly; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink2_aga_genlock : linetoscr_16_shrink2_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink2_aga_spr_genlock : linetoscr_16_shrink2_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink2_aga_spronly; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink2_aga_genlock : linetoscr_32_shrink2_aga; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink2_aga_spr_genlock : linetoscr_32_shrink2_aga_spr; - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink2_aga_spronly; - break; - } - } - } - if (get_shdelay_add()) { - pfield_do_linetoscr_shdelay_normal = pfield_do_linetoscr_normal; - pfield_do_linetoscr_shdelay_sprite = pfield_do_linetoscr_sprite; - pfield_do_linetoscr_normal = pfield_do_linetoscr_normal_shdelay; - pfield_do_linetoscr_sprite = pfield_do_linetoscr_sprite_shdelay; - } + int monid = 0; + struct amigadisplay *ad = &adisplays[monid]; + struct vidbuf_description *vidinfo = &ad->gfxvidinfo; + struct vidbuffer *vb = &vidinfo->drawbuffer; + + vidinfo->outbuffer = vb; + vb->last_drawn_line = 0; + + if (!drawlines) { + return; } -#endif - // A1000 Denise right border "bordersprite" bug - if (denisea1000) { - if (res_shift == 0) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_aga_spronly; - break; - } - } else if (res_shift == 2) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_stretch2_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_stretch2_aga_spronly; - break; - } - } else if (res_shift == 1) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_stretch1_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_stretch1_aga_spronly; - break; - } - } else if (res_shift == -1) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink1f_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink1f_aga_spronly; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink1_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink1_aga_spronly; - break; - } - } - } else if (res_shift == -2) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink2f_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink2f_aga_spronly; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_spriteonly = linetoscr_16_shrink2_aga_spronly; - break; - case 4: - pfield_do_linetoscr_spriteonly = linetoscr_32_shrink2_aga_spronly; - break; - } - } - } + + if (!lockscr(vb, false, true, display_reset > 0)) { + notice_screen_contents_lost(monid); + return; } -#ifdef ECS_DENISE - if (!aga_mode && ecsshres) { - // TODO: genlock support - if (res_shift == 0) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = linetoscr_16_sh; - pfield_do_linetoscr_sprite = linetoscr_16_sh_spr; - break; - case 4: - pfield_do_linetoscr_normal = linetoscr_32_sh; - pfield_do_linetoscr_sprite = linetoscr_32_sh_spr; - break; - } - } else if (res_shift == -1) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = linetoscr_16_shrink1f_sh; - pfield_do_linetoscr_sprite = linetoscr_16_shrink1f_sh_spr; - break; - case 4: - pfield_do_linetoscr_normal = linetoscr_32_shrink1f_sh; - pfield_do_linetoscr_sprite = linetoscr_32_shrink1f_sh_spr; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = linetoscr_16_shrink1_sh; - pfield_do_linetoscr_sprite = linetoscr_16_shrink1_sh_spr; - break; - case 4: - pfield_do_linetoscr_normal = linetoscr_32_shrink1_sh; - pfield_do_linetoscr_sprite = linetoscr_32_shrink1_sh_spr; - break; - } - } - } else if (res_shift == -2) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = linetoscr_16_shrink2f_sh; - pfield_do_linetoscr_sprite = linetoscr_16_shrink2f_sh_spr; - break; - case 4: - pfield_do_linetoscr_normal = linetoscr_32_shrink2f_sh; - pfield_do_linetoscr_sprite = linetoscr_32_shrink2f_sh_spr; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = linetoscr_16_shrink2_sh; - pfield_do_linetoscr_sprite = linetoscr_16_shrink2_sh_spr; - break; - case 4: - pfield_do_linetoscr_normal = linetoscr_32_shrink2_sh; - pfield_do_linetoscr_sprite = linetoscr_32_shrink2_sh_spr; - break; - } - } + + draw_frame_extras(vb, -1, -1); + + // video port adapters + if (currprefs.monitoremu) { + struct vidbuf_description *outvi = &adisplays[currprefs.monitoremu_mon].gfxvidinfo; + struct vidbuffer *out = &outvi->drawbuffer; + if (init_genlock_data != specialmonitor_need_genlock()) { + init_genlock_data = specialmonitor_need_genlock(); + init_row_map(); } - } -#endif - if (!aga_mode && !ecsshres) { - if (res_shift == 0) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_genlock : linetoscr_16; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_spr_genlock : linetoscr_16_spr; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_genlock : linetoscr_32; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_spr_genlock : linetoscr_32_spr; - break; + bool locked = true; + bool multimon = currprefs.monitoremu_mon != 0; + if (multimon) { + locked = lockscr(out, false, true, display_reset > 0); + outvi->xchange = vidinfo->xchange; + outvi->ychange = vidinfo->ychange; + } else { + out = &vidinfo->tempbuffer; + } + setspecialmonitorpos(out); + if (locked && emulate_specialmonitors(vb, out)) { + if (!multimon) { + vb->tempbufferinuse = true; + vb = vidinfo->outbuffer = out; } - } else if (res_shift == 2) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch2_genlock : linetoscr_16_stretch2; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_spr_genlock : linetoscr_16_stretch2_spr; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_stretch2_genlock : linetoscr_32_stretch2; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_stretch2_spr_genlock : linetoscr_32_stretch2_spr; - break; + if (out->nativepositioning) { + setnativeposition(out); } - } else if (res_shift == 1) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch1_genlock : linetoscr_16_stretch1; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch1_spr_genlock : linetoscr_16_stretch1_spr; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_stretch1_genlock : linetoscr_32_stretch1; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_stretch1_spr_genlock : linetoscr_32_stretch1_spr; - break; + if (!ad->specialmonitoron) { + need_genlock_data = specialmonitor_need_genlock(); + ad->specialmonitoron = true; + compute_framesync(); } - } else if (res_shift == -1) { - if (currprefs.gfx_lores_mode) { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink1f_genlock : linetoscr_16_shrink1f; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink1f_spr_genlock : linetoscr_16_shrink1f_spr; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink1f_genlock : linetoscr_32_shrink1f; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink1f_spr_genlock : linetoscr_32_shrink1f_spr; - break; - } - } else { - switch (vidinfo->drawbuffer.pixbytes) { - case 2: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_shrink1_genlock : linetoscr_16_shrink1; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_shrink1_spr_genlock : linetoscr_16_shrink1_spr; - break; - case 4: - pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_32_shrink1_genlock : linetoscr_32_shrink1; - pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_32_shrink1_spr_genlock : linetoscr_32_shrink1_spr; - break; - } + } else { + need_genlock_data = false; + if (ad->specialmonitoron || out->tempbufferinuse) { + out->tempbufferinuse = false; + ad->specialmonitoron = false; + compute_framesync(); } } + if (multimon && locked) { + unlockscr(out, -1, -1); + render_screen(out->monitor_id, 1, true); + show_screen(out->monitor_id, 0); + } } - pfield_do_linetoscr_normal2 = pfield_do_linetoscr_normal; - pfield_do_linetoscr_sprite2 = pfield_do_linetoscr_sprite2; -} -// A1000 Denise right border bug: sprites have 1 extra lores pixel visible -static void pfield_do_linetoscr_bordersprite_a1000(int start, int stop, int blank) -{ - if (blank || exthblank > 0 || exthblank_force || extborder) { - pfield_do_fill_line(start, stop, blank); - return; - } - pfield_do_fill_line(start, stop, blank); - if (start < sprite_playfield_start) { - return; + // genlock + if (currprefs.genlock_image && (currprefs.genlock || currprefs.genlock_effects) && !currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated) { + setspecialmonitorpos(&vidinfo->tempbuffer); + if (init_genlock_data != specialmonitor_need_genlock()) { + need_genlock_data = init_genlock_data = specialmonitor_need_genlock(); + init_row_map(); + //pfield_set_linetoscr(); + } + emulate_genlock(vb, &vidinfo->tempbuffer, aga_genlock_features_zdclken); + vb = vidinfo->outbuffer = &vidinfo->tempbuffer; + if (vb->nativepositioning) + setnativeposition(vb); + vidinfo->drawbuffer.tempbufferinuse = true; } - if (stop > sprite_end) { - stop = sprite_end; - if (start >= stop) { - return; + +#ifdef CD32 + // cd32 fmv + if (!currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated && currprefs.cs_cd32fmv) { + if (cd32_fmv_active) { + cd32_fmv_genlock(vb, &vidinfo->tempbuffer); + vb = vidinfo->outbuffer = &vidinfo->tempbuffer; + setnativeposition(vb); + vidinfo->drawbuffer.tempbufferinuse = true; + } else { + vidinfo->drawbuffer.tempbufferinuse = false; } } - pfield_do_linetoscr_spriteonly(src_pixel, start, stop, false); -} +#endif -// left or right AGA border sprite -static void pfield_do_linetoscr_bordersprite_aga(int start, int stop, int blank) -{ - if (blank || exthblank > 0 || exthblank_force || extborder) { - pfield_do_fill_line(start, stop, blank); - return; + // grayscale + if (!currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated && + ((!currprefs.genlock && (!bplcolorburst_field && currprefs.cs_color_burst)) || currprefs.gfx_grayscale)) { + setspecialmonitorpos(&vidinfo->tempbuffer); + emulate_grayscale(vb, &vidinfo->tempbuffer); + vb = vidinfo->outbuffer = &vidinfo->tempbuffer; + if (vb->nativepositioning) + setnativeposition(vb); + vidinfo->drawbuffer.tempbufferinuse = true; } - pfield_do_linetoscr_spriteonly(src_pixel, start, stop, false); + + unlockscr(vb, display_reset ? -2 : -1, -1); } -static void dummy_worker (int start, int stop, int blank) +void check_prefs_picasso(void) { -} +#ifdef PICASSO96 + for (int monid = 0; monid < MAX_AMIGAMONITORS; monid++) { + struct amigadisplay *ad = &adisplays[monid]; -static int ham_decode_pixel; -static uae_u32 ham_lastcolor; + if (ad->picasso_on && ad->picasso_redraw_necessary) + picasso_refresh(monid); + ad->picasso_redraw_necessary = 0; -static void decode_ham_pixel(int hdp) -{ - if (!bplham) { - int pv = pixdata.apixels[hdp]; -#ifdef AGA - if (aga_mode) - ham_lastcolor = colors_for_drawing.color_regs_aga[pv ^ bplxor] & 0xffffff; - else -#endif - ham_lastcolor = colors_for_drawing.color_regs_ecs[pv] & 0xfff; - } else if (aga_mode) { - if (bplplanecnt >= 7) { /* AGA mode HAM8 */ - int pw = pixdata.apixels[hdp]; - int pv = pw ^ bplxor; - int pc = pv >> 2; - switch (pv & 0x3) - { - case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pc] & 0xffffff; break; - case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pw & 0xFC); break; - case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pw & 0xFC) << 16; break; - case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pw & 0xFC) << 8; break; - } - } else { /* AGA mode HAM6 */ - int pw = pixdata.apixels[hdp]; - int pv = pw ^ bplxor; - uae_u32 pc = ((pw & 0xf) << 0) | ((pw & 0xf) << 4); - switch (pv & 0x30) - { - case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv & 0x0f] & 0xffffff; break; - case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break; - case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break; - case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break; - } + if (ad->picasso_requested_on == ad->picasso_on && !ad->picasso_requested_forced_on) + continue; + + devices_unsafeperiod(); + + if (!ad->picasso_requested_on && monid > 0) { + ad->picasso_requested_on = ad->picasso_on; + ad->picasso_requested_forced_on = false; + continue; } - } else { - if (!bpldualpf) { - /* OCS/ECS mode HAM6 */ - int pv = pixdata.apixels[ham_decode_pixel]; - switch (pv & 0x30) - { - case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv] & 0xfff; break; - case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; - case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; - case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; - } - } else { - /* OCS/ECS mode HAM6 + DPF */ - int pv = pixdata.apixels[ham_decode_pixel]; - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int idx = lookup[pv]; - switch (pv & 0x30) - { - case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[idx] & 0xfff; break; - case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (idx & 0xF); break; - case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (idx & 0xF) << 8; break; - case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (idx & 0xF) << 4; break; + + if (ad->picasso_requested_on) { + if (!toggle_rtg(monid, -2)) { + ad->picasso_requested_forced_on = false; + ad->picasso_on = false; + ad->picasso_requested_on = false; + continue; } } - } -} + ad->picasso_requested_forced_on = false; + ad->picasso_on = ad->picasso_requested_on; -/* Decode HAM in the invisible portion of the display (left of VISIBLE_LEFT_BORDER), - * but don't draw anything in. This is done to prepare HAM_LASTCOLOR for later, - * when decode_ham runs. - * - */ -static void init_ham_decoding(void) -{ - int unpainted_amiga = unpainted; + if (!ad->picasso_on) { + clear_inhibit_frame(monid, IHF_PICASSO); + ad->gf_index = ad->interlace_on ? GF_INTERLACE : GF_NORMAL; + } else { + set_inhibit_frame(monid, IHF_PICASSO); + ad->gf_index = GF_RTG; + } - ham_decode_pixel = src_pixel; -#if 0 - ham_decode_pixel = -hamleftborderhidden; -#endif - ham_lastcolor = color_reg_get(&colors_for_drawing, 0); - while (unpainted_amiga-- > 0) { - decode_ham_pixel(ham_decode_pixel++); + gfx_set_picasso_state(monid, ad->picasso_on); + picasso_enablescreen(monid, ad->picasso_requested_on); + + notice_screen_contents_lost(monid); + notice_new_xcolors(); + count_frame(monid); + compute_framesync(); } +#endif } -static void decode_ham(int pix, int stoppos, int blank) +void redraw_frame(void) { - int todraw_amiga = res_shift_from_window(stoppos - pix); - while (todraw_amiga-- > 0) { - decode_ham_pixel(ham_decode_pixel); - ham_linebuf[ham_decode_pixel++] = ham_lastcolor; - } + last_drawn_line = 0; + first_drawn_line = 32767; + // do not do full refresh if lagless mode + // because last line would appear as bright line + if (isvsync_chipset() < 0) + return; + finish_drawing_frame(true); } -static void decode_ham_border(int pix, int stoppos, int blank) +void full_redraw_all(void) { - ham_lastcolor = color_reg_get(&colors_for_drawing, 0); + int monid = 0; + bool redraw = false; + struct amigadisplay *ad = &adisplays[monid]; + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + if (vidinfo->drawbuffer.height_allocated && amiga2aspect_line_map) { + notice_screen_contents_lost(monid); + if (!ad->picasso_on) { + redraw_frame(); + redraw = true; + } + } + if (ad->picasso_on) { + gfxboard_refresh(monid); + redraw = true; + } + if (redraw) { + render_screen(0, 1, true); + show_screen(0, 0); + } } -static void erase_ham_right_border(int pix, int stoppos, bool blank) +bool vsync_handle_check(void) { - if (stoppos < playfield_end) - return; - // erase right border in HAM modes or old HAM data may be visible - // if DDFSTOP < DIWSTOP (Uridium II title screen) - int todraw_amiga = res_shift_from_window (stoppos - pix); - while (todraw_amiga-- > 0) - ham_linebuf[ham_decode_pixel++] = 0; + int monid = 0; + struct amigadisplay *ad = &adisplays[monid]; + int changed = check_prefs_changed_gfx(); + if (changed > 0) { + reset_drawing(); + init_row_map(); + init_aspect_maps(); + notice_screen_contents_lost(monid); + notice_new_xcolors(); + } else if (changed < 0) { + reset_drawing(); + init_row_map(); + init_aspect_maps(); + notice_screen_contents_lost(monid); + notice_new_xcolors(); + } + if (config_changed) { + device_check_config(); + } + return changed != 0; } -static void gen_pfield_tables(void) +void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p, bool drawlines, bool initial) { - int i; - - for (i = 0; i < 256; i++) { - int plane1 = ((i >> 0) & 1) | ((i >> 1) & 2) | ((i >> 2) & 4) | ((i >> 3) & 8); - int plane2 = ((i >> 1) & 1) | ((i >> 2) & 2) | ((i >> 3) & 4) | ((i >> 4) & 8); - - dblpf_2nd1[i] = plane1 == 0 && plane2 != 0; - dblpf_2nd2[i] = plane2 != 0; + int monid = 0; + struct amigadisplay *ad = &adisplays[monid]; + last_redraw_point++; + if (lof_changed || interlace_seen <= 0 || (currprefs.gfx_iscanlines && interlace_seen > 0) || last_redraw_point >= 2 || long_field || doublescan < 0) { + last_redraw_point = 0; -#ifdef AGA - dblpf_ind1_aga[i] = plane1 == 0 ? plane2 : plane1; - dblpf_ind2_aga[i] = plane2 == 0 ? plane1 : plane2; + if (!initial) { + if (ad->framecnt == 0) { + finish_drawing_frame(drawlines); +#ifdef AVIOUTPUT + if (!ad->picasso_on) { + frame_drawn(monid); + } +#endif + } + count_frame(monid); + } +#if 0 + if (interlace_seen > 0) { + interlace_seen = -1; + } + else if (interlace_seen == -1) { + interlace_seen = 0; + if (currprefs.gfx_scandoubler && currprefs.gfx_vresolution) + notice_screen_contents_lost(); + } #endif - dblpf_ms1[i] = plane1 == 0 ? (plane2 == 0 ? 16 : 8) : 0; - dblpf_ms2[i] = plane2 == 0 ? (plane1 == 0 ? 16 : 0) : 8; - dblpf_ms[i] = i == 0 ? 16 : 8; - - if (plane2 > 0) - plane2 += 8; - // use OCS/ECS unused plane bits 6 and 7 for - // dualplayfield BPLCON2 invalid value emulation. - int plane1x = (i & 0x40) ? 0 : plane1; - int plane2x = (i & 0x80) ? 0 : plane2; - dblpf_ind1[i] = plane1 == 0 ? plane2x : plane1x; - dblpf_ind2[i] = plane2 == 0 ? plane1x : plane2x; - - sprite_offs[i] = (i & 15) ? 0 : 2; - - clxtab[i] = ((((i & 3) && (i & 12)) << 9) - | (((i & 3) && (i & 48)) << 10) - | (((i & 3) && (i & 192)) << 11) - | (((i & 12) && (i & 48)) << 12) - | (((i & 12) && (i & 192)) << 13) - | (((i & 48) && (i & 192)) << 14)); + if (quit_program < 0) { +#ifdef SAVESTATE + if (!savestate_state && quit_program == -UAE_QUIT && currprefs.quitstatefile[0]) { + savestate_initsave(currprefs.quitstatefile, 1, 1, true); + save_state(currprefs.quitstatefile, _T("")); + } +#endif + quit_program = -quit_program; + set_inhibit_frame(monid, IHF_QUIT_PROGRAM); + set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); + return; + } + if (ad->framecnt == 0) { + init_drawing_frame(); + } else if (currprefs.cpu_memory_cycle_exact) { + //init_hardware_for_drawing_frame(); + } + } else { +#if 0 + if (isvsync_chipset()) { + flush_screen(vidinfo->inbuffer, 0, 0); /* vsync mode */ + } +#endif } - memset(all_ones, 0xff, MAX_PIXELS_PER_LINE); - + gui_flicker_led (-1, 0, 0); } -/* When looking at this function and the ones that inline it, bear in mind -what an optimizing compiler will do with this code. All callers of this -function only pass in constant arguments (except for E). This means -that many of the if statements will go away completely after inlining. */ -STATIC_INLINE void draw_sprites_1(struct sprite_entry *e, int dualpf, int has_attach) + +static void dummy_flush_line(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int line_no) { - uae_u16 *buf = spixels + e->first_pixel; - uae_u8 *stbuf = spixstate.stb + e->first_pixel; - uae_u16 *stfmbuf = spixstate.stbfm + e->first_pixel; - int spr_pos, pos; - int epos = e->pos; - int emax = e->max; +} - buf -= epos; - stbuf -= epos; - stfmbuf -= epos; +static void dummy_flush_block(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) +{ +} - spr_pos = epos - ((DISPLAY_LEFT_SHIFT - DIW_DDF_OFFSET) << sprite_buffer_res); +static void dummy_flush_screen(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) +{ +} - if (spr_pos < sprite_first_x) - sprite_first_x = spr_pos; +static void dummy_flush_clear_screen(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) +{ +} - for (pos = epos; pos < emax; pos++, spr_pos++) { - if (spr_pos >= 0 && spr_pos < MAX_PIXELS_PER_LINE) { - struct spritepixelsbuf *sp = &spritepixels[spr_pos]; - sp->data = buf[pos]; - sp->stdata = stbuf[pos]; - sp->stfmdata = stfmbuf[pos]; - sp->flags = has_attach ? 1 : 0; - // ECS superhires sprite odd/even bit - sp->flags |= (pos & 2) ? 2 : 0; - } - } +static int dummy_lock(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) +{ + return 1; +} - if (spr_pos > sprite_last_x) - sprite_last_x = spr_pos; +static void dummy_unlock(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) +{ } -/* See comments above. Do not touch if you don't know what's going on. -* (We do _not_ want the following to be inlined themselves). */ -/* lores bitplane, lores sprites */ -static void NOINLINE draw_sprites_normal_sp_nat(struct sprite_entry *e) { draw_sprites_1(e, 0, 0); } -static void NOINLINE draw_sprites_normal_dp_nat(struct sprite_entry *e) { draw_sprites_1(e, 1, 0); } -static void NOINLINE draw_sprites_normal_sp_at(struct sprite_entry *e) { draw_sprites_1(e, 0, 1); } -static void NOINLINE draw_sprites_normal_dp_at(struct sprite_entry *e) { draw_sprites_1(e, 1, 1); } +static void gfxbuffer_reset(int monid) +{ + struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + vidinfo->drawbuffer.flush_line = dummy_flush_line; + vidinfo->drawbuffer.flush_block = dummy_flush_block; + vidinfo->drawbuffer.flush_screen = dummy_flush_screen; + vidinfo->drawbuffer.flush_clear_screen = dummy_flush_clear_screen; + vidinfo->drawbuffer.lockscr = dummy_lock; + vidinfo->drawbuffer.unlockscr = dummy_unlock; +} -#ifdef AGA -/* not very optimized */ -STATIC_INLINE void draw_sprites_aga(struct sprite_entry *e) +void notice_resolution_seen (int res, bool lace) { - draw_sprites_1(e, bpldualpf, e->has_attached); + if (res > frame_res) + frame_res = res; + if (res > 0) + can_use_lores = 0; + if (!frame_res_lace && lace) + frame_res_lace = lace; } -#endif -STATIC_INLINE void draw_sprites_ecs(struct sprite_entry *e) +bool notice_interlace_seen (int monid, bool lace) { - if (e->has_attached) { - if (bpldualpf) - draw_sprites_normal_dp_at(e); - else - draw_sprites_normal_sp_at(e); + struct amigadisplay *ad = &adisplays[0]; + bool changed = false; + bool interlace_on = false; + + // non-lace to lace switch (non-lace active at least one frame)? + if (lace) { + if (interlace_seen == 0) { + changed = true; + interlace_on = true; + //write_log (_T("->lace PC=%x\n"), m68k_getpc ()); + } + interlace_seen = currprefs.gfx_vresolution ? 1 : -1; } else { - if (bpldualpf) - draw_sprites_normal_dp_nat(e); - else - draw_sprites_normal_sp_nat(e); + if (interlace_seen) { + changed = true; + //write_log (_T("->non-lace PC=%x\n"), m68k_getpc ()); + } + interlace_seen = 0; } -} -#ifdef AGA -/* clear possible bitplane data outside DIW area */ -static void clear_bitplane_border_aga(void) -{ - int len, shift = res_shift; - uae_u8 v = 0; - - if (shift < 0) { - shift = -shift; - len = (real_playfield_start - playfield_start) << shift; - int offset = playfield_start << shift; - memset(pixdata.apixels + pixels_offset + offset, v, len); - if (bplham) - memset(ham_linebuf + pixels_offset + offset, v, len * sizeof(uae_u32)); - - len = (playfield_end - real_playfield_end) << shift; - offset = real_playfield_end << shift; - memset(pixdata.apixels + pixels_offset + offset, v, len); - if (bplham) - memset(ham_linebuf + pixels_offset + offset, v, len * sizeof(uae_u32)); - } else { - len = (real_playfield_start - playfield_start) >> shift; - int offset = playfield_start >> shift; - memset(pixdata.apixels + pixels_offset + offset, v, len); - if (bplham) - memset(ham_linebuf + pixels_offset + offset, v, len * sizeof(uae_u32)); + if (changed) { + if (currprefs.gf[GF_INTERLACE].enable && memcmp(&currprefs.gf[GF_NORMAL], &currprefs.gf[GF_INTERLACE], sizeof(struct gfx_filterdata))) { + changed_prefs.gf[GF_NORMAL].changed = true; + changed_prefs.gf[GF_INTERLACE].changed = true; + if (ad->interlace_on != interlace_on) { + ad->interlace_on = interlace_on; + set_config_changed(); + } + } else { + ad->interlace_on = false; + } + } - len = (playfield_end - real_playfield_end) >> shift; - offset = real_playfield_end >> shift; - memset(pixdata.apixels + pixels_offset + offset, v, len); - if (bplham) - memset(ham_linebuf + pixels_offset + offset, v, len * sizeof(uae_u32)); + if (!ad->picasso_on) { + if (ad->interlace_on) { + ad->gf_index = GF_INTERLACE; + } else { + ad->gf_index = GF_NORMAL; + } + } else { + ad->gf_index = GF_RTG; } + + return changed; } -#endif -static void weird_bitplane_fix(int start, int end) +void allocvidbuffer(int monid, struct vidbuffer *buf, int width, int height, int depth) { - uae_u8 *p = pixdata.apixels + pixels_offset; + memset(buf, 0, sizeof (struct vidbuffer)); + buf->monitor_id = monid; + buf->pixbytes = (depth + 7) / 8; + buf->width_allocated = (width + 7) & ~7; + buf->height_allocated = height; - start = res_shift_from_window(start); - end = res_shift_from_window(end); + buf->outwidth = buf->width_allocated; + buf->outheight = buf->height_allocated; + buf->inwidth = buf->width_allocated; + buf->inheight = buf->height_allocated; - if (!bpldualpf) { - // HAM is unaffected (probably because plane 5 is HAM control bit) - if (bplham) - return; - if (bplplanecnt >= 5 && plf2pri >= 5) { - // Emulate OCS/ECS only undocumented "SWIV" hardware feature: - // PF2 >= 5 and bit in plane 5 set: other planes are ignored in color selection. - for (int i = start; i < end; i++) { - if (p[i] & 0x10) - p[i] = 0x10; - } - } - } else if (plf1pri >= 5 || plf2pri >= 5) { - // If PFx is invalid (>=5), matching playfield's color becomes transparent - // (COLOR00). Priorities keep working normally: "transparent" playfield - // will still hide lower priority playfield behind it. - // Logo in Running man / Scoopex - uae_u8 mask1 = 0x01 | 0x04 | 0x10; - uae_u8 mask2 = 0x02 | 0x08 | 0x20; - for (int i = start; i < end; i++) { - if (plf1pri >= 5 && (p[i] & mask1)) - p[i] |= 0x40; - if (plf2pri >= 5 && (p[i] & mask2)) - p[i] |= 0x80; - } - } + buf->rowbytes = buf->width_allocated * buf->pixbytes; + int size = buf->rowbytes * buf->height_allocated; + buf->realbufmem = xcalloc(uae_u8, size + 2 * buf->rowbytes); + buf->bufmem_allocated = buf->bufmem = buf->realbufmem + buf->rowbytes; + buf->bufmemend = buf->realbufmem + size - buf->rowbytes; + buf->bufmem_lockable = true; } -/* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time -constant. That will cause some unnecessary code to be optimized away. -Don't touch this if you don't know what you are doing. */ +void freevidbuffer(int monid, struct vidbuffer *buf) +{ + xfree(buf->realbufmem); + memset(buf, 0, sizeof (struct vidbuffer)); +} -#define MERGE(a,b,mask,shift) do {\ - uae_u32 tmp = mask & (a ^ (b >> shift)); \ - a ^= tmp; \ - b ^= (tmp << shift); \ -} while (0) +void reset_drawing(void) +{ + int monid = 0; + struct amigadisplay *ad = &adisplays[monid]; + struct vidbuf_description *vidinfo = &ad->gfxvidinfo; -#define MERGE64(a,b,mask,shift) do {\ - uae_u64 tmp = mask & (a ^ (b >> shift)); \ - a ^= tmp; \ - b ^= (tmp << shift); \ -} while (0) + syncdebug = currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA; + max_diwstop = 0; + exthblank = 0; + exthblanken = false; + display_reset = 1; + denise_sprite_blank_active = false; + delayed_sprite_vblank_ecs = false; + init_aspect_maps (); -#define GETLONG32(P) (*(uae_u32*)P) -#define GETLONG64(P) (*(uae_u64*)P) + init_row_map (); -STATIC_INLINE void pfield_doline32_1(uae_u32 *pixels, int wordcount, int planes, uae_u8 *real_bplpt[8]) -{ - while (wordcount-- > 0) { - uae_u32 b0, b1, b2, b3, b4, b5, b6, b7; + last_redraw_point = 0; - b0 = 0, b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0, b6 = 0, b7 = 0; - switch (planes) { -#ifdef AGA - case 8: b0 = GETLONG32(real_bplpt[7]); real_bplpt[7] += 4; - case 7: b1 = GETLONG32(real_bplpt[6]); real_bplpt[6] += 4; -#endif - case 6: b2 = GETLONG32(real_bplpt[5]); real_bplpt[5] += 4; - case 5: b3 = GETLONG32(real_bplpt[4]); real_bplpt[4] += 4; - case 4: b4 = GETLONG32(real_bplpt[3]); real_bplpt[3] += 4; - case 3: b5 = GETLONG32(real_bplpt[2]); real_bplpt[2] += 4; - case 2: b6 = GETLONG32(real_bplpt[1]); real_bplpt[1] += 4; - case 1: b7 = GETLONG32(real_bplpt[0]); real_bplpt[0] += 4; - } + notice_screen_contents_lost(monid); + init_drawing_frame(); - MERGE(b0, b1, 0x55555555, 1); - MERGE(b2, b3, 0x55555555, 1); - MERGE(b4, b5, 0x55555555, 1); - MERGE(b6, b7, 0x55555555, 1); + frame_res_cnt = currprefs.gfx_autoresolution_delay; + lightpen_y1[0] = lightpen_y2[0] = -1; + lightpen_y1[1] = lightpen_y2[1] = -1; - MERGE(b0, b2, 0x33333333, 2); - MERGE(b1, b3, 0x33333333, 2); - MERGE(b4, b6, 0x33333333, 2); - MERGE(b5, b7, 0x33333333, 2); + reset_custom_limits(); - MERGE(b0, b4, 0x0f0f0f0f, 4); - MERGE(b1, b5, 0x0f0f0f0f, 4); - MERGE(b2, b6, 0x0f0f0f0f, 4); - MERGE(b3, b7, 0x0f0f0f0f, 4); + clearbuffer(&vidinfo->drawbuffer); + clearbuffer(&vidinfo->tempbuffer); + drawing_blank_start = 0; + drawing_blank_end = vidinfo->drawbuffer.inheight; - MERGE(b0, b1, 0x00ff00ff, 8); - MERGE(b2, b3, 0x00ff00ff, 8); - MERGE(b4, b5, 0x00ff00ff, 8); - MERGE(b6, b7, 0x00ff00ff, 8); + center_reset = 1; + ad->specialmonitoron = false; + bplcolorburst_field = 1; + ecs_genlock_features_active = false; + aga_genlock_features_zdclken = false; + ecs_genlock_features_colorkey = false; - MERGE(b0, b2, 0x0000ffff, 16); - do_put_mem_long(pixels + 0, b0); - do_put_mem_long(pixels + 4, b2); - MERGE(b1, b3, 0x0000ffff, 16); - do_put_mem_long(pixels + 2, b1); - do_put_mem_long(pixels + 6, b3); - MERGE(b4, b6, 0x0000ffff, 16); - do_put_mem_long(pixels + 1, b4); - do_put_mem_long(pixels + 5, b6); - MERGE(b5, b7, 0x0000ffff, 16); - do_put_mem_long(pixels + 3, b5); - do_put_mem_long(pixels + 7, b7); - pixels += 8; - } + denise_reset(false); + select_lts(); } - -STATIC_INLINE void pfield_doline64_1(uae_u64 *pixels, int wordcount, int planes, uae_u8 *real_bplpt[8]) +static void gen_direct_drawing_table(void) { - while (wordcount-- > 0) { - uae_u64 b0, b1, b2, b3, b4, b5, b6, b7; - - b0 = 0, b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0, b6 = 0, b7 = 0; - switch (planes) { #ifdef AGA - case 8: b0 = GETLONG64(real_bplpt[7]); real_bplpt[7] += 8; - case 7: b1 = GETLONG64(real_bplpt[6]); real_bplpt[6] += 8; -#endif - case 6: b2 = GETLONG64(real_bplpt[5]); real_bplpt[5] += 8; - case 5: b3 = GETLONG64(real_bplpt[4]); real_bplpt[4] += 8; - case 4: b4 = GETLONG64(real_bplpt[3]); real_bplpt[3] += 8; - case 3: b5 = GETLONG64(real_bplpt[2]); real_bplpt[2] += 8; - case 2: b6 = GETLONG64(real_bplpt[1]); real_bplpt[1] += 8; - case 1: b7 = GETLONG64(real_bplpt[0]); real_bplpt[0] += 8; - } - - MERGE64(b0, b1, 0x5555555555555555, 1); - MERGE64(b2, b3, 0x5555555555555555, 1); - MERGE64(b4, b5, 0x5555555555555555, 1); - MERGE64(b6, b7, 0x5555555555555555, 1); - - MERGE64(b0, b2, 0x3333333333333333, 2); - MERGE64(b1, b3, 0x3333333333333333, 2); - MERGE64(b4, b6, 0x3333333333333333, 2); - MERGE64(b5, b7, 0x3333333333333333, 2); - - MERGE64(b0, b4, 0x0f0f0f0f0f0f0f0f, 4); - MERGE64(b1, b5, 0x0f0f0f0f0f0f0f0f, 4); - MERGE64(b2, b6, 0x0f0f0f0f0f0f0f0f, 4); - MERGE64(b3, b7, 0x0f0f0f0f0f0f0f0f, 4); - - MERGE64(b0, b1, 0x00ff00ff00ff00ff, 8); - MERGE64(b2, b3, 0x00ff00ff00ff00ff, 8); - MERGE64(b4, b5, 0x00ff00ff00ff00ff, 8); - MERGE64(b6, b7, 0x00ff00ff00ff00ff, 8); - - MERGE64(b0, b2, 0x0000ffff0000ffff, 16); - do_put_mem_quad(pixels + 0, b0); - do_put_mem_quad(pixels + 4, b2); - MERGE64(b1, b3, 0x0000ffff0000ffff, 16); - do_put_mem_quad(pixels + 2, b1); - do_put_mem_quad(pixels + 6, b3); - MERGE64(b4, b6, 0x0000ffff0000ffff, 16); - do_put_mem_quad(pixels + 1, b4); - do_put_mem_quad(pixels + 5, b6); - MERGE64(b5, b7, 0x0000ffff0000ffff, 16); - do_put_mem_quad(pixels + 3, b5); - do_put_mem_quad(pixels + 7, b7); - pixels += 8; + // BYPASS grayscale color table + for (int i = 0; i < 256; i++) { + uae_u32 v = (i << 16) | (i << 8) | i; + direct_colors_for_drawing_bypass.acolors[i] = CONVERT_RGB(v); } +#endif } -/* See above for comments on inlining. These functions should _not_ -be inlined themselves. */ -static void NOINLINE pfield_doline32_n1(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 1, real_bplpt); } -static void NOINLINE pfield_doline32_n2(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 2, real_bplpt); } -static void NOINLINE pfield_doline32_n3(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 3, real_bplpt); } -static void NOINLINE pfield_doline32_n4(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 4, real_bplpt); } -static void NOINLINE pfield_doline32_n5(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 5, real_bplpt); } -static void NOINLINE pfield_doline32_n6(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 6, real_bplpt); } -#ifdef AGA -static void NOINLINE pfield_doline32_n7(uae_u32 *data, int count, uae_u8* real_bplpt[8]) { pfield_doline32_1(data, count, 7, real_bplpt); } -static void NOINLINE pfield_doline32_n8(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 8, real_bplpt); } -#endif +void drawing_init (void) +{ + int monid = 0; + struct amigadisplay *ad = &adisplays[monid]; + struct vidbuf_description *vidinfo = &ad->gfxvidinfo; -static void NOINLINE pfield_doline64_n1(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 1, real_bplpt); } -static void NOINLINE pfield_doline64_n2(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 2, real_bplpt); } -static void NOINLINE pfield_doline64_n3(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 3, real_bplpt); } -static void NOINLINE pfield_doline64_n4(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 4, real_bplpt); } -static void NOINLINE pfield_doline64_n5(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 5, real_bplpt); } -static void NOINLINE pfield_doline64_n6(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 6, real_bplpt); } -#ifdef AGA -static void NOINLINE pfield_doline64_n7(uae_u64 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline64_1(data, count, 7, real_bplpt); } -static void NOINLINE pfield_doline64_n8(uae_u64 *data, int count, uae_u8* real_bplpt[8]) { pfield_doline64_1(data, count, 8, real_bplpt); } -#endif + refresh_indicator_init(); -static void pfield_doline(int lineno) -{ - uae_u8 *real_bplpt[8]; - int offset = 0; // currprefs.chipset_hr ? 8 : 0; + gen_pfield_tables(); -#if 0 - int wordcount = (dp_for_drawing->plflinelen + 1) / 2; - uae_u64 *data = pixdata.apixels_q + MAX_PIXELS_PER_LINE / sizeof(uae_u64); - -#define DATA_POINTER(n) ((debug_bpl_mask & (1 << n)) ? (line_data[lineno] + (n) * MAX_WORDS_PER_LINE * 2) : (debug_bpl_mask_one ? all_ones : all_zeros)) - real_bplpt[0] = DATA_POINTER(0); - real_bplpt[1] = DATA_POINTER(1); - real_bplpt[2] = DATA_POINTER(2); - real_bplpt[3] = DATA_POINTER(3); - real_bplpt[4] = DATA_POINTER(4); - real_bplpt[5] = DATA_POINTER(5); -#ifdef AGA - real_bplpt[6] = DATA_POINTER(6); - real_bplpt[7] = DATA_POINTER(7); -#endif + gen_direct_drawing_table(); - switch (bplmaxplanecnt) { - default: break; - case 0: memset(data, 0, wordcount * 64); break; - case 1: pfield_doline64_n1(data, wordcount, real_bplpt); break; - case 2: pfield_doline64_n2(data, wordcount, real_bplpt); break; - case 3: pfield_doline64_n3(data, wordcount, real_bplpt); break; - case 4: pfield_doline64_n4(data, wordcount, real_bplpt); break; - case 5: pfield_doline64_n5(data, wordcount, real_bplpt); break; - case 6: pfield_doline64_n6(data, wordcount, real_bplpt); break; -#ifdef AGA - case 7: pfield_doline64_n7(data, wordcount, real_bplpt); break; - case 8: pfield_doline64_n8(data, wordcount, real_bplpt); break; -#endif + uae_sem_init (&gui_sem, 0, 1); +#ifdef PICASSO96 + if (!isrestore ()) { + ad->picasso_on = 0; + ad->picasso_requested_on = 0; + ad->gf_index = GF_NORMAL; + gfx_set_picasso_state(0, 0); } -#else - int wordcount = dp_for_drawing->plflinelen; - uae_u32 *data = pixdata.apixels_l + MAX_PIXELS_PER_LINE / sizeof(uae_u32); - -#define DATA_POINTER(n) ((debug_bpl_mask & (1 << n)) ? (line_data[lineno] + (n) * MAX_WORDS_PER_LINE * 2 + offset) : (debug_bpl_mask_one ? all_ones : all_zeros)) - real_bplpt[0] = DATA_POINTER(0); - real_bplpt[1] = DATA_POINTER(1); - real_bplpt[2] = DATA_POINTER(2); - real_bplpt[3] = DATA_POINTER(3); - real_bplpt[4] = DATA_POINTER(4); - real_bplpt[5] = DATA_POINTER(5); -#ifdef AGA - real_bplpt[6] = DATA_POINTER(6); - real_bplpt[7] = DATA_POINTER(7); #endif + xlinebuffer = vidinfo->drawbuffer.bufmem; + xlinebuffer_genlock = NULL; - switch (bplmaxplanecnt) { - default: break; - case 0: memset(data, 0, wordcount * 32); break; - case 1: pfield_doline32_n1(data, wordcount, real_bplpt); break; - case 2: pfield_doline32_n2(data, wordcount, real_bplpt); break; - case 3: pfield_doline32_n3(data, wordcount, real_bplpt); break; - case 4: pfield_doline32_n4(data, wordcount, real_bplpt); break; - case 5: pfield_doline32_n5(data, wordcount, real_bplpt); break; - case 6: pfield_doline32_n6(data, wordcount, real_bplpt); break; -#ifdef AGA - case 7: pfield_doline32_n7(data, wordcount, real_bplpt); break; - case 8: pfield_doline32_n8(data, wordcount, real_bplpt); break; -#endif - } -#endif + ad->inhibit_frame = 0; - if (refresh_indicator_buffer && refresh_indicator_height > lineno) { - uae_u8 *opline = refresh_indicator_buffer + lineno * MAX_PIXELS_PER_LINE * 2; - wordcount *= 32; - if (!memcmp(opline, data, wordcount)) { - if (refresh_indicator_changed[lineno] != 0xff) { - refresh_indicator_changed[lineno]++; - if (refresh_indicator_changed[lineno] > refresh_indicator_changed_prev[lineno]) { - refresh_indicator_changed_prev[lineno] = refresh_indicator_changed[lineno]; - } - } - } else { - memcpy(opline, data, wordcount); - if (refresh_indicator_changed[lineno] != refresh_indicator_changed_prev[lineno]) - refresh_indicator_changed_prev[lineno] = 0; - refresh_indicator_changed[lineno] = 0; - } - } + gfxbuffer_reset(0); + reset_drawing(); +} +int isvsync_chipset(void) +{ + struct amigadisplay *ad = &adisplays[0]; + if (ad->picasso_on || currprefs.gfx_apmode[0].gfx_vsync <= 0) + return 0; + if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0) + return 1; + if (currprefs.m68k_speed >= 0) + return -1; + return currprefs.cachesize ? -3 : -2; +} +int isvsync_rtg(void) +{ + struct amigadisplay *ad = &adisplays[0]; + if (!ad->picasso_on || currprefs.gfx_apmode[1].gfx_vsync <= 0) + return 0; + if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0) + return 1; + if (currprefs.m68k_speed >= 0) + return -1; + return currprefs.cachesize ? -3 : -2; } -void init_row_map(void) +int isvsync(void) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - static uae_u8 *oldbufmem; - static int oldheight, oldpitch; - static bool oldgenlock, oldburst; - int i, j; + struct amigadisplay *ad = &adisplays[0]; + if (ad->picasso_on) + return isvsync_rtg (); + else + return isvsync_chipset (); +} - if (vidinfo->drawbuffer.height_allocated > max_uae_height) { - write_log (_T("Resolution too high, aborting\n")); - abort (); - } - if (!row_map) { - row_map = xmalloc(uae_u8*, max_uae_height + 1); - row_map_genlock = xmalloc(uae_u8*, max_uae_height + 1); +void get_mode_blanking_limits(int *phbstop, int *phbstrt, int *pvbstop, int *pvbstrt) +{ + *pvbstop = linear_denise_vbstrt; + *pvbstrt = linear_denise_vbstop; + int strt, stop; + if (new_beamcon0 & BEAMCON0_VARVBEN) { + stop = linear_denise_hbstop; + strt = linear_denise_hbstrt; + } else { + stop = linear_denise_hbstop << 2; + strt = linear_denise_hbstrt << 2; } + int len = (current_linear_hpos << 3) - (stop - strt); + *phbstop = stop; + *phbstrt = stop + len; +} - if (oldbufmem && oldbufmem == vidinfo->drawbuffer.bufmem && - oldheight == vidinfo->drawbuffer.height_allocated && - oldpitch == vidinfo->drawbuffer.rowbytes && - oldgenlock == init_genlock_data && - oldburst == (row_map_color_burst_buffer ? 1 : 0)) - return; - xfree(row_map_genlock_buffer); - row_map_genlock_buffer = NULL; - if (init_genlock_data) { - row_map_genlock_buffer = xcalloc(uae_u8, vidinfo->drawbuffer.width_allocated * (vidinfo->drawbuffer.height_allocated + 2)); - } - xfree(row_map_color_burst_buffer); - row_map_color_burst_buffer = NULL; - if (currprefs.cs_color_burst) { - row_map_color_burst_buffer = xcalloc(uae_u8, vidinfo->drawbuffer.height_allocated + 2); - } - j = oldheight == 0 ? max_uae_height : oldheight; - for (i = vidinfo->drawbuffer.height_allocated; i < max_uae_height + 1 && i < j + 1; i++) { - row_map[i] = row_tmp; - row_map_genlock[i] = row_tmp; - } - for (i = 0, j = 0; i < vidinfo->drawbuffer.height_allocated; i++, j += vidinfo->drawbuffer.rowbytes) { - row_map[i] = vidinfo->drawbuffer.bufmem + j; - if (init_genlock_data) { - row_map_genlock[i] = row_map_genlock_buffer + vidinfo->drawbuffer.width_allocated * (i + 1); - } else { - row_map_genlock[i] = NULL; +static void setup_brdblank(void) +{ + denise_brdstrt_unalign = false; + denise_brdstop_unalign = false; + if (aga_mode && currprefs.gfx_resolution == RES_SUPERHIRES && borderblank) { + denise_brdstrt = denise_hstop - 1; + denise_brdstop = denise_hstrt - 1; + denise_brdstrt_lores = denise_brdstrt >> 2; + denise_brdstop_lores = denise_brdstop >> 2; + if (!denise_hstop_unalign) { + denise_brdstrt_unalign = true; + } + if (!denise_brdstop) { + denise_brdstop_unalign = true; } + } else { + denise_brdstrt = -1; + denise_brdstop = -1; } - oldbufmem = vidinfo->drawbuffer.bufmem; - oldheight = vidinfo->drawbuffer.height_allocated; - oldpitch = vidinfo->drawbuffer.rowbytes; - oldgenlock = init_genlock_data; - oldburst = row_map_color_burst_buffer ? 1 : 0; } -static void init_aspect_maps(void) +static void calchdiw(void) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int i, maxl, h; + int hbmask = (1 << (RES_SUPERHIRES - currprefs.gfx_resolution)) - 1; - linedbld = linedbl = currprefs.gfx_vresolution; - if (doublescan > 0 && interlace_seen <= 0) { - linedbl = 0; - linedbld = 1; + denise_hstrt = (denise_diwstrt & 0xFF) << 2; + denise_hstop = (denise_diwstop & 0xFF) << 2; + + // ECS Denise/AGA: horizontal DIWHIGH high bit. + if (diwhigh_written && ecs_denise) { + denise_hstrt |= ((denise_diwhigh >> 5) & 1) << (8 + 2); + denise_hstop |= ((denise_diwhigh >> 13) & 1) << (8 + 2); + } else { + denise_hstop |= 0x100 << 2; } - maxl = (MAXVPOS + 1) << linedbld; - min_ypos_for_screen = minfirstline << linedbl; - max_drawn_amiga_line = -1; - vidinfo->xchange = 1 << (RES_MAX - currprefs.gfx_resolution); - vidinfo->ychange = linedbl ? 1 : 2; + // AGA only: horizontal DIWHIGH hires/shres bits. + if (diwhigh_written && aga_mode) { + denise_hstrt |= (denise_diwhigh >> 3) & 3; + denise_hstop |= (denise_diwhigh >> 11) & 3; + } - visible_left_start = 0; - visible_right_stop = MAX_STOP; - visible_top_start = 0; - visible_bottom_stop = MAX_STOP; + denise_hstrt_lores = denise_hstrt >> 2; + denise_hstop_lores = denise_hstop >> 2; - h = vidinfo->drawbuffer.height_allocated; - if (h == 0) - /* Do nothing if the gfx driver hasn't initialized the screen yet */ - return; + denise_hstrt &= ~hbmask; + denise_hstop &= ~hbmask; - if (native2amiga_line_map) - xfree (native2amiga_line_map); - if (amiga2aspect_line_map) - xfree (amiga2aspect_line_map); + denise_hstrt_unalign = (denise_hstrt & 3) != 0; + denise_hstop_unalign = (denise_hstop & 3) != 0; - /* At least for this array the +1 is necessary. */ - native2amiga_line_map_height = h; - amiga2aspect_line_map = xmalloc (int, (MAXVPOS + 1) * 2 + 1); - native2amiga_line_map = xmalloc (int, native2amiga_line_map_height); + setup_brdblank(); +} - for (i = 0; i < maxl; i++) { - int v = i - min_ypos_for_screen; - if (v >= h && max_drawn_amiga_line < 0) - max_drawn_amiga_line = v; - if (i < min_ypos_for_screen || v >= native2amiga_line_map_height) - v = -1; - amiga2aspect_line_map[i] = v; +static void spr_nearest(void) +{ + int min = 0x7fffffff; + int cnt1 = denise_hcounter_new; + int cnt2 = denise_hcounter; + for (int i = 0; i < MAX_SPRITES; i++) { + struct denise_spr *s = &dspr[i]; + if (s->armed) { + if (denise_xposmask_mask_lores) { + int diff = (s->xpos_lores & denise_xposmask_lores) - cnt1; + if (diff < 0) { + diff = (s->xpos_lores | denise_xposmask_mask_lores) - cnt1; + } + if (diff < min && diff >= 0) { + min = diff; + } + diff = (s->xpos_lores & denise_xposmask_lores) - cnt2; + if (diff < 0) { + diff = (s->xpos_lores | denise_xposmask_mask_lores) - cnt2; + } + if (diff < min && diff >= 0) { + min = diff; + } + } else { + int diff = s->xpos_lores - cnt1; + if (diff < min && diff >= 0) { + min = diff; + } + diff = s->xpos_lores - cnt2; + if (diff < min && diff >= 0) { + min = diff; + } + } + } } - if (max_drawn_amiga_line < 0) - max_drawn_amiga_line = maxl - min_ypos_for_screen; - - for (i = 0; i < native2amiga_line_map_height; i++) - native2amiga_line_map[i] = -1; - - for (i = maxl - 1; i >= min_ypos_for_screen; i--) { - int j; - if (amiga2aspect_line_map[i] == -1) - continue; - for (j = amiga2aspect_line_map[i]; j < native2amiga_line_map_height && native2amiga_line_map[j] == -1; j++) - native2amiga_line_map[j] = i >> linedbl; + denise_spr_nearestcnt = min - 2; + if (aga_mode && denise_spr_nearestcnt > 0 && denise_spr_nearestcnt < 0x7fffffff) { + denise_spr_nearestcnt <<= currprefs.gfx_resolution; } } -static void setbplmode(void) +// arm/disarm sprite +static void spr_arm(struct denise_spr *s, int state) { - if (bplham) - bplmode = CMODE_HAM; - else if (bpldualpf) - bplmode = CMODE_DUALPF; - else if (bplehb > 0) - bplmode = CMODE_EXTRAHB; - else if (bplehb < 0) - bplmode = CMODE_EXTRAHB_ECS_KILLEHB; - else - bplmode = CMODE_NORMAL; + if (state) { + if (!s->armed) { + for (int i = 0; i < MAX_SPRITES; i++) { + if (dprspt[i] == NULL) { + dprspt[i] = s; + break; + } + } + denise_spr_nr_armed++; + if (denise_spr_nr_armed == 1) { + select_lts(); + } + s->armed = 1; + spr_nearest(); + } + } else { + for (int i = 0; i < MAX_SPRITES; i++) { + if (dprspt[i] == s) { + dprspt[i] = NULL; + for (int j = i + 1; j < MAX_SPRITES; j++) { + if (!dprspt[j]) { + break; + } + dprspt[j - 1] = dprspt[j]; + dprspt[j] = NULL; + } + break; + } + } + if (s->armed) { + denise_spr_nr_armed--; + if (denise_spr_nr_armed == 0) { + select_lts(); + } + s->armed = 0; + } + } } -static void set_sprite_visibility(void) +// arm/disarm sprite horizontal match +static void spr_arms(struct denise_spr *s, int state) { - sprite_visibility = true; - if (exthblank || exthblank_force) { - sprite_visibility = false; + // ECS Denise + superhires: sprites 4 to 7 are disabled + if (ecs_denise_only && denise_res == RES_SUPERHIRES) { + int num = s - dspr; + if (num >= 4) { + state = 0; + } } - if (extborder && (ce_is_borderblank(colors_for_drawing.extra) || !ce_is_bordersprite(colors_for_drawing.extra))) { - sprite_visibility = false; + if (state) { + if (!s->armeds) { + for (int i = 0; i < MAX_SPRITES; i++) { + if (dprspts[i] == NULL) { + dprspts[i] = s; + break; + } + } + denise_spr_nr_armeds++; + s->armeds = 1; + // Sprite start always has 1 lores pixel delay + s->shift = 1 << RES_SUPERHIRES; + } + } else { + for (int i = 0; i < MAX_SPRITES; i++) { + if (dprspts[i] == s) { + dprspts[i] = NULL; + for (int j = i + 1; j < MAX_SPRITES; j++) { + if (!dprspts[j]) { + break; + } + dprspts[j - 1] = dprspts[j]; + dprspts[j] = NULL; + } + break; + } + } + if (s->armeds) { + denise_spr_nr_armeds--; + s->armeds = 0; + } } } -/* We only save hardware registers during the hardware frame. Now, when -* drawing the frame, we expand the data into a slightly more useful -* form. */ -static void pfield_expand_dp_bplcon(void) +static void sprwrite_64(int reg, uae_u64 v) { - bool pfield_mode_changed = false; + int num = reg / 8; + struct denise_spr *s = &dspr[num]; + bool second = (reg & 2) != 0; - bplres = dp_for_drawing->bplres; - bplplanecnt = dp_for_drawing->nr_planes; - bplham = dp_for_drawing->ham_seen; - bplehb = dp_for_drawing->ehb_seen && ehb_enable; - if (ecs_denise) { - // Check for KillEHB bit in ECS/AGA - if (dp_for_drawing->bplcon2 & 0x0200) { - bplehb = 0; - if (!aga_mode) - bplehb = -1; + if (second) { + s->datab64 = v; + } else { + s->dataa64 = v; + spr_arm(s, 1); +#if AUTOSCALE_SPRITES + /* get upper and lower sprite position if brdsprt enabled */ + if ((s->dataa64 || s->datab64) && bordersprite) { + if (linear_vpos < plffirstline_total) { + plffirstline_total = linear_vpos; + } + if (linear_vpos > plflastline_total) { + plflastline_total = linear_vpos; + } + int x = s->xpos;; + if (diwfirstword_total > x && x >= (48 << RES_MAX)) { + diwfirstword_total = x; + } + if (diwlastword_total < x + 16 && x <= (448 << RES_MAX)) { + diwlastword_total = x + 16; + } +#endif } - } else if (denisea1000_noehb) { - bplehb = -1; } - bplcolorburst = (dp_for_drawing->bplcon0 & 0x200) != 0; - if (!bplcolorburst) - bplcolorburst_field = 0; -#ifdef ECS_DENISE - int oecsshres = ecsshres; - ecsshres = bplres == RES_SUPERHIRES && ecs_denise && !aga_mode && (dp_for_drawing->bplcon0 & 0x40); - pfield_mode_changed = oecsshres != ecsshres; -#endif +} - plf1pri = dp_for_drawing->bplcon2 & 7; - plf2pri = (dp_for_drawing->bplcon2 >> 3) & 7; - plf_sprite_mask = 0xFFFF0000 << (4 * plf2pri); - plf_sprite_mask |= (0x0000FFFF << (4 * plf1pri)) & 0xFFFF; - bpldualpf = (dp_for_drawing->bplcon0 & 0x400) == 0x400; - bpldualpfpri = (dp_for_drawing->bplcon2 & 0x40) == 0x40; +static void sprwrite(int reg, uae_u32 v) +{ + int num = reg / 8; + struct denise_spr *s = &dspr[num]; + bool dat = (reg & 4) != 0; + bool second = (reg & 2) != 0; -#ifdef AGA - // BYPASS: HAM and EHB select bits are ignored - if (bplbypass != (dp_for_drawing->bplcon0 & 0x20) != 0) { - bpland = 0xff; - bplbypass = (dp_for_drawing->bplcon0 & 0x20) != 0; - pfield_mode_changed = true; - } - if (bplbypass) { - if (bplham && bplplanecnt == 6) - bpland = 0x0f; - if (bplham && bplplanecnt == 8) - bpland = 0xfc; - bplham = 0; - if (bplehb) - bpland = 31; - bplehb = 0; + // If sprite X matches and sprite was already armed, + // old value matches and shifter copy is done first. + // (For example Hybris score board) + if (s->armed && s->xpos_lores == denise_hcounter) { + s->dataas = s->dataa; + s->databs = s->datab; + s->dataas64 = s->dataa64; + s->databs64 = s->datab64; + spr_arms(s, 1); + s->fmode = denise_sprfmode; + s->shiftercopydone = true; } - bpldualpf2of = (dp_for_drawing->bplcon3 >> 10) & 7; - sbasecol[0] = ((dp_for_drawing->bplcon4sp >> 4) & 15) << 4; - sbasecol[1] = ((dp_for_drawing->bplcon4sp >> 0) & 15) << 4; - bplxor = dp_for_drawing->bplcon4bm >> 8; - int sh = (colors_for_drawing.extra >> CE_SHRES_DELAY_SHIFT) & 3; - if (sh != bpldelay_sh) { - bpldelay_sh = sh; - pfield_mode_changed = true; - } - if (sprite_smaller_than_64 && (dp_for_drawing->fmode & 0x0c) == 0x0c) - sprite_smaller_than_64_inuse = true; - sprite_smaller_than_64 = (dp_for_drawing->fmode & 0x0c) != 0x0c; + + if (dat) { + uae_u16 oa = s->dataa; + uae_u16 ob = s->datab; + if (second) { + s->datab = v; + } else { + s->dataa = v; + // if same cycle would arm the sprite and match it, match is missed + if (!s->armed && (s->xpos & (1 << 2)) && s->xpos - (1 << 2) == (denise_hcounter << 2)) { + return; + } + spr_arm(s, 1); +#if AUTOSCALE_SPRITES + /* get upper and lower sprite position if brdsprt enabled */ + if ((s->dataa || s->datab) && bordersprite) { + if (linear_vpos < plffirstline_total) { + plffirstline_total = linear_vpos; + } + if (linear_vpos > plflastline_total) { + plflastline_total = linear_vpos; + } + int x = s->xpos;; + if (diwfirstword_total > x && x >= (48 << RES_MAX)) { + diwfirstword_total = x; + } + if (diwlastword_total < x + 16 && x <= (448 << RES_MAX)) { + diwlastword_total = x + 16; + } + } #endif - ecs_genlock_features_active = (ecs_denise && ((dp_for_drawing->bplcon2 & 0x0c00) || ce_is_borderntrans(colors_for_drawing.extra))) || - (currprefs.genlock_effects ? 1 : 0) || (aga_mode && (dp_for_drawing->bplcon3 & 0x004) && (dp_for_drawing->bplcon0 & 1)); - if (ecs_genlock_features_active) { - ecs_genlock_features_colorkey = currprefs.ecs_genlock_features_colorkey_mask[0] || currprefs.ecs_genlock_features_colorkey_mask[1] || - currprefs.ecs_genlock_features_colorkey_mask[2] || currprefs.ecs_genlock_features_colorkey_mask[3]; - ecs_genlock_features_mask = currprefs.ecs_genlock_features_plane_mask; - aga_genlock_features_zdclken = false; - if (dp_for_drawing->bplcon2 & 0x0800) { - ecs_genlock_features_mask = 1 << ((dp_for_drawing->bplcon2 >> 12) & 7); } - if (dp_for_drawing->bplcon2 & 0x0400) { - ecs_genlock_features_colorkey = true; + } else { + if (second) { + s->ctl = v; + spr_arm(s, 0); + } else { + s->pos = v; } - if ((dp_for_drawing->bplcon3 & 0x0004) && (dp_for_drawing->bplcon0 & 1)) { - aga_genlock_features_zdclken = true; + int sprxp = (s->pos & 0xff) * 2 + (s->ctl & 1); + s->xpos_lores = sprxp; + sprxp <<= 2; + if (aga_mode) { + if (s->ctl & 0x10) { + sprxp |= 2; + } + if (s->ctl & 0x08) { + sprxp |= 1; + } + } else if (ecs_denise) { + if (s->ctl & 0x10) { + sprxp |= 2; + } + } + s->xpos = sprxp; + + if (aga_mode) { + dspr[num & ~1].attached = ((dspr[num & ~1].ctl | dspr[num | 1].ctl) & 0x80) != 0; + } else { + dspr[num & ~1].attached = (dspr[num | 1].ctl & 0x80) != 0; + } + if (s->armed) { + spr_nearest(); } } - if (pfield_mode_changed) - pfield_set_linetoscr(); - - setbplmode(); } -static bool isham(uae_u16 bplcon0) +static void check_lts_request(void) { - int p = GET_PLANES(bplcon0); - if (!(bplcon0 & 0x800)) - return 0; - if (aga_mode) { - // AGA only has 6 or 8 plane HAM - if (p == 6 || p == 8) - return 1; - } else { - // OCS/ECS also supports 5 plane HAM - if (GET_RES_DENISE(bplcon0) > 0) - return 0; - if (p >= 5) - return 1; + if (lts_request) { + select_lts(); } - return 0; } -static void pfield_expand_dp_bplconx (int regno, int v, int hp, int vp) +static void setbplmode(void) { - regno -= RECORDED_REGISTER_CHANGE_OFFSET; - switch (regno) - { - case 0xffff - RECORDED_REGISTER_CHANGE_OFFSET: - return; - case 0x100: // BPLCON0 - dp_for_drawing->bplcon0 = v; - dp_for_drawing->bplres = GET_RES_DENISE(v); - dp_for_drawing->nr_planes = GET_PLANES(v); - dp_for_drawing->ham_seen = isham(v); - if (currprefs.chipset_hr && dp_for_drawing->bplres < currprefs.gfx_resolution) - dp_for_drawing->bplres = currprefs.gfx_resolution; - extblankcheck(); - break; - case 0x101: // BPLCON0 partial - dp_for_drawing->bplcon0 &= ~(0x0800 | 0x0400 | 0x0080 | 0x0001); - dp_for_drawing->bplcon0 |= v & (0x0800 | 0x0400 | 0x0080 | 0x0001); - dp_for_drawing->ham_seen = isham(v); - extblankcheck(); - break; - case 0x201: // AGA EHB immediate change - ehb_enable = (v & 0x7010) == 0x6000; - break; - case 0x104: // BPLCON2 - dp_for_drawing->bplcon2 = v; - break; -#ifdef ECS_DENISE - case 0x106: // BPLCON3 - dp_for_drawing->bplcon3 = v; - extblankcheck(); - break; -#endif -#ifdef AGA - case 0x10c: // BPLCON4 bitplane xor (and sprite if sprite change is not visible) - dp_for_drawing->bplcon4bm = v; - dp_for_drawing->bplcon4sp = v; - break; - case 0x10c+1: // BPLCON4 sprite bank - dp_for_drawing->bplcon4sp = v; - break; - case 0x1fc: // FMODE - dp_for_drawing->fmode = v; - break; - case 0x200: // hblank - if (v) { - exthblanken = true; - if (vp >= 0) { - extblankcheck(); - } else { - exthblank = exthblank_set; - } - } else { - exthblanken = false; - exthblank = 0; + bplham = (bplcon0_denise & 0x800) != 0; + bpldualpf = (bplcon0_denise & 0x400) == 0x400; + bplehb = denise_planes == 6 && !bplham && !bpldualpf && (!ecs_denise || !(bplcon2_denise & 0x200)); + + // BYPASS: HAM and EHB select bits are ignored + bpland = 0xff; + bplbypass = (bplcon0_denise & 0x20) != 0 && aga_mode; + p_xcolors = xcolors; + p_acolors = denise_colors.acolors; + if (bplbypass) { + if (bplham && denise_planes == 6) { + bpland = 0x0f; } - set_sprite_visibility(); - return; - case 0x208: // forced hblank - if (v) { - exthblanken = true; - exthblankon = true; - } else { - exthblanken = false; - exthblank = 0; + if (bplham && denise_planes == 8) { + bpland = 0xfc; + } + bplham = 0; + if (bplehb) { + bpland = 0x1f; + } + bplehb = 0; + p_acolors = direct_colors_for_drawing_bypass.acolors; + } + + int bplmodeo = bplmode; + int bplmode_next; + if (bplham) { + bplmode_next = CMODE_HAM; + } else if (bpldualpf) { + bplmode_next = CMODE_DUALPF; + } else if (bplehb && bplehb_eke) { + bplmode_next = CMODE_EXTRAHB_ECS_KILLEHB; + } else if (bplehb) { + bplmode_next = CMODE_EXTRAHB; + } else { + bplmode_next = CMODE_NORMAL; + } + + // AGA EHB switch has extra hires pixel delay + if (aga_mode && bplmode_next == CMODE_EXTRAHB && bplmodeo != CMODE_EXTRAHB) { + bplmode_new = bplmode_next; + aga_unalign0++; + lts_request = true; + } else if (aga_mode && bplmode_next != CMODE_EXTRAHB && bplmodeo == CMODE_EXTRAHB) { + bplmode_new = bplmode_next; + aga_unalign0++; + lts_request = true; + } else { + bplmode = bplmode_new = bplmode_next; + if (bplmodeo != bplmode) { + lts_request = true; } - return; - case 0x202: // hsync (debug) - hsync_debug = v; - return; - case 0x204: // hblank (debug) - hblank_debug = v; - return; - case 0x206: // hcenter (denug) - hcenter_debug = v; - return; -#endif } - pfield_expand_dp_bplcon(); - set_res_shift(); } -static int drawing_color_matches; -static enum { color_match_acolors, color_match_full } color_match_type; - -/* Set up colors_for_drawing to the state at the beginning of the currently drawn -line. Try to avoid copying color tables around whenever possible. */ -static void adjust_drawing_colors (int ctable, int need_full, bool blankcheck) +static void update_specials(void) { - uae_u16 oe = colors_for_drawing.extra; - if (drawing_color_matches != ctable || need_full < 0) { - if (need_full) { - color_reg_cpy (&colors_for_drawing, curr_color_tables + ctable); - color_match_type = color_match_full; - } else { - if (aga_mode) { - memcpy(colors_for_drawing.acolors, curr_color_tables[ctable].acolors, sizeof(xcolnr) * 256); - } else { - memcpy(colors_for_drawing.acolors, curr_color_tables[ctable].acolors, sizeof(xcolnr) * 32); - } - colors_for_drawing.extra = curr_color_tables[ctable].extra; - color_match_type = color_match_acolors; + decode_specials = 0; + if (!aga_mode) { + // OCS/ECS feature if plf2pri>=5 and plane 5 bit is set: value is always 16 (SWIV scoreboard) + if (bplmode == CMODE_NORMAL && denise_planes >= 5 && plf2pri >= 5) { + decode_specials = 1; + } + // OCS/ECS DPF feature: if matching plf2pri>=5: value is always 0 (Running man / Scoopex logo) + if (bplmode == CMODE_DUALPF && (plf1pri >= 5 || plf2pri >= 5)) { + decode_specials = 2; } - drawing_color_matches = ctable; - } else if (need_full && color_match_type != color_match_full) { - color_reg_cpy (&colors_for_drawing, &curr_color_tables[ctable]); - color_match_type = color_match_full; - } - if (colors_for_drawing.extra != oe) { - reset_hblanking_limits(); - set_hblanking_limits(); - expand_vb_state(); } } -static void playfield_hard_way(line_draw_func worker_pfield, int first, int last) +static void update_genlock(void) { - int stop = last < real_playfield_end ? last : real_playfield_end; - - src_pixel += playfield_diff; - ham_decode_pixel += playfield_diff; - - if (first < real_playfield_start) { - int next = last < real_playfield_start ? last : real_playfield_start; - // left border sprite - pfield_do_linetoscr_bordersprite_aga(first, next, false); - // bitplanes - if (stop > real_playfield_start) { - (*worker_pfield)(real_playfield_start, stop, false); - // right border sprite - if (last > real_playfield_end) { - int sfirst = first > real_playfield_end ? first : real_playfield_end; - pfield_do_linetoscr_bordersprite_aga(sfirst, last, false); - } + ecs_genlock_features_active = (ecs_denise && ((bplcon2_denise & 0x0c00) || bordertrans)) || + (currprefs.genlock_effects ? 1 : 0) || (aga_mode && (bplcon3_denise & 0x004) && (bplcon0_denise & 1)); + if (ecs_genlock_features_active) { + ecs_genlock_features_colorkey = currprefs.ecs_genlock_features_colorkey_mask[0] || currprefs.ecs_genlock_features_colorkey_mask[1] || + currprefs.ecs_genlock_features_colorkey_mask[2] || currprefs.ecs_genlock_features_colorkey_mask[3]; + ecs_genlock_features_mask = currprefs.ecs_genlock_features_plane_mask; + aga_genlock_features_zdclken = false; + if (bplcon2_denise & 0x0800) { + ecs_genlock_features_mask = 1 << ((bplcon2_denise >> 12) & 7); } - } else { - // bitplanes - if (stop > real_playfield_start) { - (*worker_pfield)(first, stop, false); - // right border sprite - if (last > real_playfield_end) { - int sfirst = first > real_playfield_end ? first : real_playfield_end; - pfield_do_linetoscr_bordersprite_aga(sfirst, last, false); - } + if (bplcon2_denise & 0x0400) { + ecs_genlock_features_colorkey = true; + } + if ((bplcon3_denise & 0x0004) && (bplcon0_denise & 1)) { + aga_genlock_features_zdclken = true; } } - - src_pixel -= playfield_diff; - ham_decode_pixel -= playfield_diff; } -static void do_color_changes(line_draw_func worker_border, line_draw_func worker_pfield, int vp) +static void update_bplcon1(void) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - int lastpos = visible_left_border; - int lastpos2 = lastpos; - int endpos = visible_left_border + vidinfo->drawbuffer.inwidth; - bool vbarea = vp < vblank_top_start || vp >= vblank_bottom_stop; - bool playfield_first = true; - - extborder = false; // reset here because it always have start and end in same scanline - hcenter_debug = 0; - if (!ecs_denise) { - // used for OCS Denise blanking bug when not ECS Denise or AGA. - exthblank = 0; + if (!aga_mode) { + if (ecs_denise && (reswitch_unalign == 1 || reswitch_unalign < 0)) { + return; + } + if (!ecs_denise && (reswitch_unalign == 1 || reswitch_unalign == 2 || reswitch_unalign < 0)) { + return; + } } - ehb_enable = true; - set_sprite_visibility(); - for (int i = dip_for_drawing->first_color_change; i <= dip_for_drawing->last_color_change; i++) { - int regno = curr_color_changes[i].regno; - uae_u32 value = curr_color_changes[i].value; - int nextpos, nextpos_in_range; + int bplcon1_hr[2]; + int delay1 = (bplcon1_denise & 0x0f) | ((bplcon1_denise & 0x0c00) >> 6); + int delay2 = ((bplcon1_denise >> 4) & 0x0f) | (((bplcon1_denise >> 4) & 0x0c00) >> 6); + bool wasoddeven = bplcon1_shift[0] != bplcon1_shift[1]; + int mask = 3 >> (currprefs.gfx_resolution); - if (i == dip_for_drawing->last_color_change) { - nextpos = endpos; - } else { - nextpos = shres_coord_hw_to_window_x(curr_color_changes[i].linepos); - } + bplcon1_shift_mask = fetchmode_mask_denise >> denise_res; - nextpos_in_range = nextpos; - if (nextpos_in_range > endpos) { - nextpos_in_range = endpos; - } + bplcon1_shift[0] = delay1; + bplcon1_shift[1] = delay2; - if (vp >= 0) { + bplcon1_shift[0] &= bplcon1_shift_mask; + bplcon1_shift[1] &= bplcon1_shift_mask; - if (full_blank || vbarea) { - // vblank + programmed vblank / hardwired vblank + bplcon1_hr[0] = (bplcon1_denise >> 8) & 3; + bplcon1_hr[1] = (bplcon1_denise >> 12) & 3; + + bplcon1_shift_full[0] = (bplcon1_shift[0] << 2) | bplcon1_hr[0]; + bplcon1_shift_full[1] = (bplcon1_shift[1] << 2) | bplcon1_hr[1]; - hposblank = 3; - if (nextpos_in_range > lastpos) { - int t = nextpos_in_range; - (*worker_border)(lastpos, t, 1); - lastpos = t; - } + bplcon1_shift_mask_full = (bplcon1_shift_mask << 2) | 3; - } else { - // non-vblank scanline + int bplcon1_hr_mask = 0;//3 >> denise_res; - int hblank_left = exthblankon ? hblank_left_start : hblank_left_start_hard; + bplcon1_shift_full[0] &= ~mask; + bplcon1_shift_full[1] &= ~mask; - // left hblank (left edge to hblank end) - if (nextpos_in_range > lastpos && lastpos < hblank_left) { - int t = nextpos_in_range <= hblank_left ? nextpos_in_range : hblank_left; - (*worker_border)(lastpos, t, 1); - lastpos = t; - } + bplcon1_shift_full_masked[0] = bplcon1_shift_full[0] & ~bplcon1_hr_mask; + bplcon1_shift_full_masked[1] = bplcon1_shift_full[1] & ~bplcon1_hr_mask; - if (playfield_start_pre >= playfield_start || !ce_is_borderblank(colors_for_drawing.extra)) { + if (wasoddeven != (bplcon1_shift[0] != bplcon1_shift[1])) { + lts_request = true; + } +} - // normal left border (hblank end to playfield start) - if (nextpos_in_range > lastpos && lastpos < playfield_start) { - int t = nextpos_in_range <= playfield_start ? nextpos_in_range : playfield_start; - (*worker_border)(lastpos, t, 0); - lastpos = t; - } +STATIC_INLINE void get_shres_pix(uae_u8 p0, uae_u8 p1, uae_u32 *dpix0, uae_u32 *dpix1) +{ + uae_u16 v; + uae_u8 off = ((p1 & 3) * 4) + (p0 & 3) + ((p0 | p1) & 16); + v = (denise_colors.color_regs_ecs[off] & 0xccc) << 0; + v |= v >> 2; + *dpix0 = xcolors[v]; + v = (denise_colors.color_regs_ecs[off] & 0x333) << 2; + v |= v >> 2; + *dpix1 = xcolors[v]; +} +STATIC_INLINE void get_shres_pix_genlock(uae_u8 p0, uae_u8 p1, uae_u32 *dpix0, uae_u32 *dpix1, uae_u16 *gpix0, uae_u16 *gpix1) +{ + uae_u16 v; + uae_u8 off = ((p1 & 3) * 4) + (p0 & 3) + ((p0 | p1) & 16); + v = (denise_colors.color_regs_ecs[off] & 0xccc) << 0; + v |= v >> 2; + *dpix0 = xcolors[v]; + *gpix0 = v; + v = (denise_colors.color_regs_ecs[off] & 0x333) << 2; + v |= v >> 2; + *gpix1 = v; + *dpix1 = xcolors[v]; +} - // playfield - if (nextpos_in_range > lastpos && lastpos >= playfield_start && lastpos < playfield_end) { - int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end; - // always draw bitplanes from start position, bitplanes can start during hblank - if (playfield_first && lastpos > playfield_start) { - lastpos = playfield_start; - } - playfield_first = false; - if ((plf2pri >= 5 || plf1pri >= 5) && !aga_mode) { - weird_bitplane_fix(lastpos, t); - } - if (may_require_hard_way && (may_require_hard_way < 0 || (bplxor && may_require_hard_way && worker_pfield != pfield_do_linetoscr_bordersprite_aga))) { - playfield_hard_way(worker_pfield, lastpos, t); - } else { - (*worker_pfield)(lastpos, t, 0); - } - // playfield started inside hblank? Overwrite it with blank. - if (playfield_start < hblank_left) { - (*worker_border)(playfield_start, hblank_left, 1); - } - lastpos = t; - } +static void update_bordercolor(void) +{ + if (borderblank) { + bordercolor = fullblack; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + bordercolor = denise_colors.acolors[0]; + bordercolor |= 0x01000000; + } + bordercolor_ecs_shres = 0; + } else { + bordercolor = denise_colors.acolors[0]; + get_shres_pix(0, 0, &bordercolor_ecs_shres, &bordercolor_ecs_shres); + } + setup_brdblank(); +} - } else { - // special AGA borderblank 1 shres pixel delay +static void update_hblank(void) +{ + if (exthblankon_aga) { + int hbmask = (1 << (RES_SUPERHIRES - currprefs.gfx_resolution)) - 1; - // borderblank left border (hblank end to playfield_start_pre) - if (nextpos_in_range > lastpos && lastpos < playfield_start_pre) { - int t = nextpos_in_range <= playfield_start_pre ? nextpos_in_range : playfield_start_pre; - (*worker_border)(lastpos, t, 0); - lastpos = t; - } - // AGA "buggy" borderblank, real background color visible, single shres pixel wide. - if (nextpos_in_range > lastpos && lastpos < playfield_start) { - int t = nextpos_in_range <= playfield_start ? nextpos_in_range : playfield_start; - (*worker_border)(lastpos, t, -1); - lastpos = t; - } + denise_phbstrt = hbstrt_denise_reg & 0xff; + denise_phbstop = hbstop_denise_reg & 0xff; + denise_phbstrt_lores = (denise_phbstrt << 1) | ((hbstrt_denise_reg >> 10) & 1); + denise_phbstop_lores = (denise_phbstop << 1) | ((hbstop_denise_reg >> 10) & 1); + denise_phbstrt <<= 3; + denise_phbstop <<= 3; + denise_phbstrt |= (hbstrt_denise_reg >> 8) & 7; + denise_phbstop |= (hbstop_denise_reg >> 8) & 7; - // playfield with last shres pixel not drawn. - if (nextpos_in_range > lastpos && lastpos >= playfield_start && lastpos < playfield_end_pre) { - int t = nextpos_in_range <= playfield_end_pre ? nextpos_in_range : playfield_end_pre; - if (may_require_hard_way && (may_require_hard_way < 0 || (bplxor && may_require_hard_way && worker_pfield != pfield_do_linetoscr_bordersprite_aga))) { - playfield_hard_way(worker_pfield, lastpos, t); - } else { - (*worker_pfield)(lastpos, t, 0); - } - lastpos = t; - } + denise_phbstrt &= ~hbmask; + denise_phbstop &= ~hbmask; - // last shres pixel of playfield blanked - if (nextpos_in_range > lastpos && lastpos >= playfield_end_pre && lastpos < playfield_end) { - int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end; - (*worker_border)(lastpos, t, 0); - lastpos = t; - } - } + denise_phbstrt_unalign = (denise_phbstrt & 3) != 0; + denise_phbstop_unalign = (denise_phbstop & 3) != 0; - int hblank_right = exthblankon ? hblank_right_stop : hblank_right_stop_hard; + } else { - // right border (playfield end to hblank start) - if (nextpos_in_range > lastpos && lastpos >= playfield_end_pre && lastpos < hblank_right) { - int t = nextpos_in_range <= hblank_right ? nextpos_in_range : hblank_right; - (*worker_border)(lastpos, t, 0); - lastpos = t; - } + denise_phbstrt = -1; + denise_phbstop = -1; + denise_phbstrt_lores = -1; + denise_phbstop_lores = -1; + denise_phbstrt_unalign = false; + denise_phbstop_unalign = false; - // right hblank (hblank start to right edge, hblank start may be earlier than playfield end) - if (nextpos_in_range > hblank_right) { - (*worker_border)(hblank_right, nextpos_in_range, 1); - lastpos = nextpos_in_range; - } - } + } - if (syncdebug) { - if (hblank_debug || vblank_debug || hsync_debug || vsync_debug || hcenter_debug || exthblank || ce_is_borderblank(colors_for_drawing.extra)) { - pfield_do_darken_line(lastpos2, nextpos_in_range, vp); - } - if (nextpos_in_range > lastpos2) { - lastpos2 = nextpos_in_range; - } - } - } + denise_hbstrt_lores = ecs_denise ? 0x10 : 0x0f; + denise_hbstop_lores = ecs_denise ? 0x5d : 0x5d; - if (i != dip_for_drawing->last_color_change) { - if (regno >= RECORDED_REGISTER_CHANGE_OFFSET) { - pfield_expand_dp_bplconx(regno, value, nextpos, vp); - } else if (regno >= 0 && !(value & COLOR_CHANGE_MASK)) { - color_reg_set(&colors_for_drawing, regno, value); - colors_for_drawing.acolors[regno] = getxcolor(value); - } else if (regno == 0 && (value & COLOR_CHANGE_MASK)) { - if ((value & COLOR_CHANGE_MASK) == COLOR_CHANGE_ACTBORDER) { - if (value & 2) { - if (value & 1) { - exthblank_force = true; - } else { - exthblank_force = false; - } - } else { - if (value & 1) { - extborder = true; - } else { - extborder = false; - } - } - set_sprite_visibility(); - } else if (value & COLOR_CHANGE_BLANK) { - if (value & 1) { - exthblank = exthblank_set; - } else { - exthblank = 0; - // so that OCS Denise blanking bug is marked in debug mode - hblank_debug = false; - vblank_debug = false; - } - } else if (value & COLOR_CHANGE_BRDBLANK) { - colors_for_drawing.extra &= ~(1 << CE_BORDERBLANK); - colors_for_drawing.extra &= ~(1 << CE_BORDERNTRANS); - colors_for_drawing.extra &= ~(1 << CE_BORDERSPRITE); - colors_for_drawing.extra &= ~(1 << CE_EXTBLANKSET); - colors_for_drawing.extra |= (value & 1) != 0 ? (1 << CE_BORDERBLANK) : 0; - colors_for_drawing.extra |= (value & 3) == 2 ? (1 << CE_BORDERSPRITE) : 0; - colors_for_drawing.extra |= (value & 5) == 4 ? (1 << CE_BORDERNTRANS) : 0; - colors_for_drawing.extra |= (value & 8) == 8 ? (1 << CE_EXTBLANKSET) : 0; - set_sprite_visibility(); - } else if (value & COLOR_CHANGE_SHRES_DELAY) { - colors_for_drawing.extra &= ~(1 << CE_SHRES_DELAY_SHIFT); - colors_for_drawing.extra &= ~(1 << (CE_SHRES_DELAY_SHIFT + 1)); - colors_for_drawing.extra |= (value & 3) << CE_SHRES_DELAY_SHIFT; - pfield_expand_dp_bplcon(); - } - } - } + denise_strlong_lores = ecs_denise || denisea1000 ? 0x0f : 0x11; + denise_strlong_hd = denise_strlong_lores << 2; + denise_strlong_unalign = false; + if (aga_mode && currprefs.gfx_resolution == RES_SUPERHIRES) { + denise_strlong_hd += 1; + denise_strlong_unalign = true; } } -STATIC_INLINE bool is_color_changes(struct draw_info *di) +static void update_sprres_set(void) { - int regno = curr_color_changes[di->first_color_change].regno; - int changes = di->nr_color_changes; - return changes > 1 || (changes == 1 && regno != 0xffff && regno != -1); + denise_spr_add = 1 << (RES_MAX - currprefs.gfx_resolution); + denise_spr_shiftsize = 1 << (RES_SUPERHIRES - denise_sprres); } -enum double_how { - dh_buf, - dh_line, - dh_emerg -}; - -static void pfield_draw_line(struct vidbuffer *vb, int lineno, int gfx_ypos, int follow_ypos) +static void update_sprres(void) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - static int warned = 0; - int border = 0; - int do_double = 0; - bool have_color_changes; - enum double_how dh; - int ls = linestate[lineno]; - - dp_for_drawing = line_decisions + lineno; - dip_for_drawing = curr_drawinfo + lineno; - - if (dp_for_drawing->plfleft >= 0) { - lines_count++; - resolution_count[dp_for_drawing->bplres]++; + int sr = (bplcon3_denise >> 6) & 3; + if (!aga_mode) { + sr = 0; } - - switch (ls) + int odenise_sprres = denise_sprres; + switch (sr) { - case LINE_REMEMBERED_AS_PREVIOUS: -// if (!warned) // happens when program messes up with VPOSW -// write_log (_T("Shouldn't get here... this is a bug.\n")), warned++; - return; - - case LINE_BLACK: - linestate[lineno] = LINE_REMEMBERED_AS_BLACK; - border = -1; + case 0: + default: + denise_sprres = denise_res == RES_SUPERHIRES ? RES_HIRES : RES_LORES; break; - - case LINE_REMEMBERED_AS_BLACK: - return; - - case LINE_AS_PREVIOUS: - dp_for_drawing--; - dip_for_drawing--; - linestate[lineno] = LINE_DONE_AS_PREVIOUS; - if (dp_for_drawing->plfleft < 0) - border = 1; + case 1: + denise_sprres = RES_LORES; break; - - case LINE_DONE_AS_PREVIOUS: - /* fall through */ - case LINE_DONE: - return; - - case LINE_DECIDED_DOUBLE: - if (follow_ypos >= 0) { - do_double = 1; - linestate[lineno + 1] = LINE_DONE_AS_PREVIOUS; - } - - /* fall through */ - default: - if (dp_for_drawing->plfleft < 0) { - border = 1; - } - linestate[lineno] = LINE_DONE; + case 2: + denise_sprres = RES_HIRES; + break; + case 3: + denise_sprres = RES_SUPERHIRES; break; } - - have_color_changes = is_color_changes(dip_for_drawing); - if (vb_state != dp_for_drawing->vb) { - vb_state = dp_for_drawing->vb; - expand_vb_state(); + update_sprres_set(); + if (odenise_sprres != denise_sprres) { + lts_request = true; } - sprite_smaller_than_64_inuse = false; +} - dh = dh_line; - xlinebuffer = vidinfo->drawbuffer.linemem; - if (xlinebuffer == 0 && do_double - && (border == 0 || have_color_changes)) - xlinebuffer = vidinfo->drawbuffer.emergmem, dh = dh_emerg; - if (xlinebuffer == 0) - xlinebuffer = row_map[gfx_ypos], dh = dh_buf; - xlinebuffer -= linetoscr_x_adjust_pixbytes; - xlinebuffer_genlock = row_map_genlock[gfx_ypos] - linetoscr_x_adjust_pixels; - - if (row_map_color_burst_buffer) - row_map_color_burst_buffer[gfx_ypos] = bplcolorburst; - - if (border == 0) { - - pfield_expand_dp_bplcon(); - // must be after pfield_expand_dp_bplcon - adjust_drawing_colors(dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb || ecsshres, true); - pfield_init_linetoscr(false); - pfield_doline(lineno); - - /* The problem is that we must call decode_ham() BEFORE we do the sprites. */ - if (dp_for_drawing->ham_seen) { - int ohposblank = hposblank; - uae_u16 b0 = dp_for_drawing->bplcon0; - uae_u16 b2 = dp_for_drawing->bplcon2; - uae_u16 b3 = dp_for_drawing->bplcon3; - uae_u16 b4bm = dp_for_drawing->bplcon4bm; - uae_u16 b4sp = dp_for_drawing->bplcon4sp; - uae_u16 fm = dp_for_drawing->fmode; - init_ham_decoding(); - int oham_decode_pixel = ham_decode_pixel; - do_color_changes(decode_ham_border, decode_ham, lineno); - if (have_color_changes) { - // do_color_changes() did color changes and register changes, restore them. - adjust_drawing_colors(dp_for_drawing->ctable, -1, false); - dp_for_drawing->bplcon0 = b0; - dp_for_drawing->bplcon2 = b2; - dp_for_drawing->bplcon3 = b3; - dp_for_drawing->bplcon4bm = b4bm; - dp_for_drawing->bplcon4bm = b4sp; - dp_for_drawing->fmode = fm; - dp_for_drawing->bplres = GET_RES_DENISE(dp_for_drawing->bplcon0); - dp_for_drawing->nr_planes = GET_PLANES(dp_for_drawing->bplcon0); - dp_for_drawing->ham_seen = isham(dp_for_drawing->bplcon0); - if (currprefs.chipset_hr && dp_for_drawing->bplres < currprefs.gfx_resolution) { - dp_for_drawing->bplres = currprefs.gfx_resolution; - } - pfield_expand_dp_bplcon(); - set_res_shift(); - } - hposblank = ohposblank; - ham_decode_pixel = oham_decode_pixel; - bplham = dp_for_drawing->ham_at_start; - setbplmode(); - } +static void update_ecs_features(void) +{ + bool ecsena = ecs_denise && (bplcon0_denise & 1) != 0; + exthblankon_aga = aga_mode && (bplcon3_denise & 1) && ecsena; + exthblankon_ecs = (bplcon3_denise & 1) && ecsena; + exthblankon_ecsonly = exthblankon_ecs && !exthblankon_aga; + borderblank = (bplcon3_denise & 0x20) && ecsena; + bordertrans = (bplcon3_denise & 0x10) && ecsena; + bordersprite = (bplcon3_denise & 0x02) && (!borderblank || currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) && ecsena && aga_mode; + sprite_hidden_mask = 1; + if (exthblankon_ecsonly) { + denise_vblank_active = false; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + } + if (bordersprite) { + sprites_hidden2 = 0; + sprites_hidden = 0; + sprite_hidden_mask = 0; + } + update_hblank(); + update_bordercolor(); + exthblanken = exthblankon_aga || exthblankon_ecs; +} - if (dip_for_drawing->nr_sprites) { - int i; -#ifdef AGA - if (ce_is_bordersprite(colors_for_drawing.extra) && dp_for_drawing->bordersprite_seen && !ce_is_borderblank(colors_for_drawing.extra)) - clear_bitplane_border_aga(); -#endif +static void update_fmode(void) +{ + int oplanes = denise_planes; + denise_planes = GET_PLANES(bplcon0_denise); + if (denise_bplfmode == 0 && denise_res > 0 && denise_planes > 4) { + denise_planes = 0; + } + if (denise_bplfmode == 0 && denise_res > 1 && denise_planes > 2) { + denise_planes = 0; + } + if (denise_bplfmode == 1 && denise_res > 1 && denise_planes > 4) { + denise_planes = 0; + } + int osize = fetchmode_size_denise; + fetchmode_size_denise = 16 << bpldat_fmode; + fetchmode_mask_denise = fetchmode_size_denise - 1; + update_bplcon1(); + if (oplanes != denise_planes || osize != fetchmode_size_denise) { + lts_request = true; + } +} - for (i = 0; i < dip_for_drawing->nr_sprites; i++) { -#ifdef AGA - if (aga_mode) - draw_sprites_aga(curr_sprite_entries + dip_for_drawing->first_sprite_entry + i); - else -#endif - draw_sprites_ecs(curr_sprite_entries + dip_for_drawing->first_sprite_entry + i); - } - } +static void expand_bplcon4_spr(uae_u16 v) +{ + uae_u16 o = bplcon4_denise; + bplcon4_denise &= 0xff00; + bplcon4_denise |= v & 0x00ff; + // Sprite bank change is 1 hires pixel faster than bitplane XOR change + if (aga_mode && bplcon4_denise_sbase != (bplcon4_denise & 0x00ff)) { + bplcon4_denise_sbase = bplcon4_denise & 0x0ff; + sbasecol2[0] = ((bplcon4_denise_sbase >> 4) & 15) << 4; + sbasecol2[1] = ((bplcon4_denise_sbase >> 0) & 15) << 4; + aga_unalign1++; + } +} - if (dip_for_drawing->nr_sprites) { - if (ce_is_bordersprite(colors_for_drawing.extra) && !ce_is_borderblank(colors_for_drawing.extra) && dp_for_drawing->bordersprite_seen) { - do_color_changes(pfield_do_linetoscr_bordersprite_aga, pfield_do_linetoscr_spr, lineno); - } else if (agnusa1000) { - do_color_changes(pfield_do_linetoscr_bordersprite_a1000, pfield_do_linetoscr_spr, lineno); - } else { - do_color_changes(pfield_do_fill_line, dip_for_drawing->nr_sprites ? pfield_do_linetoscr_spr : pfield_do_linetoscr, lineno); - } - } else { - do_color_changes(pfield_do_fill_line, dip_for_drawing->nr_sprites ? pfield_do_linetoscr_spr : pfield_do_linetoscr, lineno); - } +static void expand_bplcon4_bm(uae_u16 v) +{ + bplcon4_denise &= 0x00ff; + bplcon4_denise = v & 0xff00; + // Sprite bank change is 1 hires pixel faster than bitplane XOR change + if (aga_mode && (bplcon4_denise >> 8) != bplcon4_denise_xor_val2) { + bplcon4_denise_xor_val2 = bplcon4_denise >> 8; + aga_unalign1++; + } +} - if (dh == dh_emerg) - memcpy(row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_pixbytes, vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); +static void expand_bplcon3(uae_u16 v) +{ + bplcon3_denise = v; + bpldualpf2of = aga_mode ? (bplcon3_denise >> 10) & 7 : 8; + update_ecs_features(); + update_sprres(); + update_genlock(); + check_lts_request(); +} - if (do_double) { - if (dh == dh_emerg) - memcpy(row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_pixbytes, vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); - else if (dh == dh_buf) - memcpy(row_map[follow_ypos], row_map[gfx_ypos], vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); - if (need_genlock_data) - memcpy(row_map_genlock[follow_ypos], row_map_genlock[gfx_ypos], vidinfo->drawbuffer.inwidth); - } +static void expand_bplcon2(uae_u16 v) +{ + bplcon2_denise = v; + plf1pri = bplcon2_denise & 7; + plf2pri = (bplcon2_denise >> 3) & 7; + plf_sprite_mask = 0xFFFF0000 << (4 * plf2pri); + plf_sprite_mask |= (0x0000FFFF << (4 * plf1pri)) & 0xFFFF; + bpldualpfpri = (bplcon2_denise & 0x40) == 0x40; - if (dip_for_drawing->nr_sprites) { - pfield_erase_hborder_sprites(); - } + if (aga_mode) { + dpf_lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; + } else { + dpf_lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; + } + dpf_lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - } else if (border > 0) { // border > 0: top or bottom border + bool bplehb_eke_o = bplehb_eke; + bplehb_eke = false; + if (ecs_denise) { + // Check for KillEHB bit in ECS/AGA + bplehb_eke = (bplcon2_denise & 0x0200) != 0; + } + bplehb_mask = denisea1000_noehb ? 0x1f : 0xff; + if (bplehb_eke_o != bplehb_eke) { + setbplmode(); + } - bool dosprites = false; + update_specials(); + check_lts_request(); +} - adjust_drawing_colors(dp_for_drawing->ctable, 0, true); +static void expand_bplcon1(uae_u16 v) +{ + if (!aga_mode) { + v &= 0x00ff; + } + bplcon1_denise = v; + update_bplcon1(); + check_lts_request(); +} -#ifdef AGA /* this makes things complex.. */ - if (dp_for_drawing->bordersprite_seen && !ce_is_borderblank(colors_for_drawing.extra) && dip_for_drawing->nr_sprites) { - dosprites = true; - pfield_expand_dp_bplcon(); - pfield_init_linetoscr(true); - pfield_erase_vborder_sprites(); - } -#endif - if (!syncdebug && !dosprites && !have_color_changes) { - if (dp_for_drawing->plfleft < -1) { - // blanked border line - int tmp = hposblank; - hposblank = 1; - fill_line_border(lineno, border); - hposblank = tmp; +static void expand_bplcon0_early(uae_u16 v) +{ + if (!aga_mode) { + int ores = denise_res; + int nres = GET_RES_DENISE(v); + if (ores == RES_LORES && nres == RES_HIRES) { + if (ecs_denise) { + reswitch_unalign = 3; } else { - // normal border line - fill_line_border(lineno, border); - } - - if (do_double) { - if (dh == dh_buf) { - xlinebuffer = row_map[follow_ypos] - linetoscr_x_adjust_pixbytes; - xlinebuffer_genlock = row_map_genlock[follow_ypos] - linetoscr_x_adjust_pixels; - fill_line_border(lineno, border); - } - /* If dh == dh_line, do_flush_line will re-use the rendered line - * from linemem. */ + reswitch_unalign = 3; } - return; } + } +} -#ifdef AGA - if (dosprites) { - - for (int i = 0; i < dip_for_drawing->nr_sprites; i++) - draw_sprites_aga(curr_sprite_entries + dip_for_drawing->first_sprite_entry + i); - do_color_changes(pfield_do_linetoscr_bordersprite_aga, pfield_do_linetoscr_bordersprite_aga, lineno); -#else - if (0) { -#endif +static void expand_bplcon0(uae_u16 v) +{ + uae_u16 old = bplcon0_denise; + if (!ecs_denise) { + v &= ~0x00F1; + } else if (!aga_mode) { + v &= ~0x00B0; + } + v &= ~((currprefs.cs_color_burst ? 0x0000 : 0x0200) | 0x0100 | 0x0080 | 0x0020); - } else { - playfield_start = visible_right_border; - playfield_end = visible_right_border; - playfield_start_pre = playfield_start; - playfield_end_pre = playfield_end; - do_color_changes(pfield_do_fill_line, pfield_do_fill_line, lineno); + if ((v & 0x800) && !(bplcon0_denise & 0x800)) { + ham_lastcolor = denise_colors.color_regs_ecs[last_bpl_pix]; + } - } + bplcon0_denise = v; - if (dh == dh_emerg) - memcpy(row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_pixbytes, vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); - if (do_double) { - if (dh == dh_emerg) - memcpy(row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_pixbytes, vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); - else if (dh == dh_buf) - memcpy(row_map[follow_ypos], row_map[gfx_ypos], vidinfo->drawbuffer.pixbytes * vidinfo->drawbuffer.inwidth); - if (need_genlock_data) - memcpy(row_map_genlock[follow_ypos], row_map_genlock[gfx_ypos], vidinfo->drawbuffer.inwidth); - } + if (denise_res != GET_RES_DENISE(bplcon0_denise) || denise_planes != GET_PLANES(bplcon0_denise)) { + lts_request = true; + } - } else { + int ores = denise_res; + denise_res = GET_RES_DENISE(bplcon0_denise); + denise_res_size = 1 << denise_res; + denise_planes = GET_PLANES(bplcon0_denise); + bplcolorburst = (bplcon0_denise & 0x200) != 0; + if (!bplcolorburst) { + bplcolorburst_field = 0; + } - // top or bottom blanking region - int tmp = hposblank; - hposblank = 1; - fill_line_border(lineno, border); - hposblank = tmp; +#if 0 + if (!aga_mode) { + if (ores == RES_HIRES && denise_res == RES_LORES) { + //reswitch_unalign = -1; + } + } +#endif + setbplmode(); + update_fmode(); + update_specials(); + update_sprres(); + if ((old & 1) != (bplcon0_denise)) { + update_ecs_features(); + update_genlock(); + } + check_lts_request(); +} + +static void expand_fmode(uae_u16 v) +{ + if (!aga_mode) { + v = 0; + } + fmode_denise = v; + denise_xposmask = (v & 0x8000) ? 0x0ff : 0x1ff; + denise_xposmask_mask_lores = (v & 0x8000) ? 0x100 : 0x000; + denise_xposmask_lores = denise_xposmask; + denise_xposmask <<= 2; + denise_xposmask |= currprefs.gfx_resolution == RES_SUPERHIRES ? 3 : (currprefs.gfx_resolution == RES_HIRES ? 2 : 0); + + denise_bplfmode = (v & 3) == 3 ? 2 : (v & 3) == 0 ? 0 : 1; + v >>= 2; + denise_sprfmode = (v & 3) == 3 ? 2 : (v & 3) == 0 ? 0 : 1; + denise_sprfmode64 = denise_sprfmode == 2; + denise_bplfmode64 = denise_bplfmode == 2; + update_fmode(); + check_lts_request(); +} + + +static void expand_colmask(void) +{ + sprcolmask = 0x40 | 0x10 | 0x04 | 0x01; + if (clxcon & (1 << 15)) { + sprcolmask |= 0x80; + } + if (clxcon & (1 << 14)) { + sprcolmask |= 0x20; + } + if (clxcon & (1 << 13)) { + sprcolmask |= 0x08; + } + if (clxcon & (1 << 12)) { + sprcolmask |= 0x02; + } + + clxcon_bpl_enable = (clxcon >> 6) & 63; + clxcon_bpl_enable |= clxcon2 & (0x40 | 0x80); + clxcon_bpl_match = clxcon & 63; + clxcon_bpl_match |= (clxcon2 & (0x01 | 0x02)) << 6; + clxcon_bpl_match &= clxcon_bpl_enable; + clxcon_bpl_enable_55 = clxcon_bpl_enable & 0x55; + clxcon_bpl_enable_aa = clxcon_bpl_enable & 0xaa; + clxcon_bpl_match_55 = clxcon_bpl_match & 0x55; + clxcon_bpl_match_aa = clxcon_bpl_match & 0xaa; + + // create bpl to bpl (CLXDAT bit 0) collision table + int clxcon_bpl_enable2 = clxcon_bpl_enable; + int clxcon_bpl_match2 = clxcon_bpl_match; + if (currprefs.collision_level < 3) { + clxcon_bpl_enable2 = 0; + clxcon_bpl_match2 = 0; + } + if (clxcon_bpl_enable_o != clxcon_bpl_enable2 || clxcon_bpl_match_o != clxcon_bpl_match2) { + for (int i = 0; i < (aga_mode ? 256 : 64); i++) { + uae_u8 m = i & clxcon_bpl_enable; + uae_u8 odd = m & 0x55; + uae_u8 even = m & 0xaa; + if ((odd && even) && m == (clxcon_bpl_enable2 & clxcon_bpl_match2)) { + bplcoltable[i] = 0x0001; + } else { + bplcoltable[i] = 0x0000; + } + } + clxcon_bpl_enable_o = clxcon_bpl_enable2; + clxcon_bpl_match_o = clxcon_bpl_match2; } } -static void center_image (void) +static void expand_clxcon(uae_u16 v) { - struct amigadisplay *ad = &adisplays[0]; - struct gfx_filterdata *fd = &currprefs.gf[ad->gf_index]; - struct vidbuf_description *vidinfo = &ad->gfxvidinfo; - int prev_x_adjust = visible_left_border; - int prev_y_adjust = thisframe_y_adjust; - - int w = vidinfo->drawbuffer.inwidth; - int ew = vidinfo->drawbuffer.extrawidth; - int maxdiw = max_diwlastword; - - if (currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN && currprefs.gfx_xcenter && !fd->gfx_filter_autoscale && max_diwstop > 0) { - - if (max_diwstop - min_diwstart < w && currprefs.gfx_xcenter == 2) - /* Try to center. */ - visible_left_border = (max_diwstop - min_diwstart - w) / 2 + min_diwstart; - else - visible_left_border = max_diwstop - w - (max_diwstop - min_diwstart - w) / 2; - visible_left_border &= ~((xshift(1, lores_shift)) - 1); + clxcon = v; + clxcon2 = 0; + expand_colmask(); +} +static void expand_clxcon2(uae_u16 v) +{ + clxcon2 = v; + expand_colmask(); +} - if (!center_reset && !vertical_changed) { - /* Would the old value be good enough? If so, leave it as it is if we want to be clever. */ - if (currprefs.gfx_xcenter == 2) { - if (visible_left_border < prev_x_adjust && prev_x_adjust < min_diwstart && min_diwstart - visible_left_border <= 32) - visible_left_border = prev_x_adjust; +static void set_strlong(void) +{ + denise_strlong = true; + if (!strlong_emulation) { + write_log("STRLONG strobe emulation activated.\n"); + strlong_emulation = true; + select_lts(); + } +} +static void copy_strlong(void) +{ + lol = denise_strlong ? 1 : 0; + if (denisea1000) { + memset(dtbuf, 0, sizeof(dtbuf)); + } +} +static void reset_strlong(void) +{ + denise_strlong = false; +} + +void denise_reset(bool hard) +{ + static int dummyint = 0; + static struct dma_rec dummydrec = { 0 }; + + dummyint = 0; + memset(&dummydrec, 0, sizeof(dummydrec)); + debug_dma_dhpos_odd = &dummyint; + debug_dma_ptr = &dummydrec; + denise_cycle_half = 0; + denise_strlong = false; + if (hard) { + strlong_emulation = false; + denise_res = 0; + denise_planes = 0; + fmode_denise = 0; + bplcon0_denise = 0; + bplcon3_denise = 0x0c00; + bplcon4_denise = 0x0011; + clxcon_bpl_enable = -1; + clxcon_bpl_match = -1; + memset(bplcoltable, 0, sizeof(bplcoltable)); + denise_xposmask = 0xffff; + sbasecol[0] = 16; + sbasecol[1] = 16; + sbasecol2[1] = 16; + sbasecol2[0] = 16; + for (int i = 0; i < MAX_SPRITES; i++) { + struct denise_spr *s = &dspr[i]; + memset(s, 0, sizeof(struct denise_spr)); + s->num = i; + s->armeds = 0; + dprspt[i] = NULL; + dprspts[i] = NULL; + } + denise_spr_nr_armed = 0; + denise_spr_nr_armeds = 0; + denise_diwhigh = 0; + denise_diwhigh2 = -1; + diwhigh_written = false; + } + bplcon4_denise_sbase = -1; + update_sprres_set(); + denise_bplfmode64 = denise_sprfmode64 = false; + denise_hdiw = false; + denise_blank_active = false; + denise_hblank = false; + denise_phblank = false; + denise_vblank = false; + denise_hblank_active = false; + denise_vblank_active = false; + denise_blank_active = denise_blank_active2 = false; + denise_blank_enabled = currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA; + extblank = false; + last_bpl_pix = 0; + decode_specials = 0; + decode_specials_debug = currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA ? 2 : (currprefs.display_calibration ? 1 : 0); + debug_special_hvsync = currprefs.gfx_overscanmode == OVERSCANMODE_ULTRA + 1; + debug_special_csync = currprefs.gfx_overscanmode == OVERSCANMODE_ULTRA + 2; + denise_csync_blanken = false; + aga_delayed_color_idx = -1; + for (int i = 0; i < 256; i++) { + uae_u16 v = 0; + if (i & (0x01 | 0x02)) { // 0/1 + if (i & (0x04 | 0x08)) { // 2/3 + v |= 0x0200; + } + if (i & (0x10 | 0x20)) { // 4/5 + v |= 0x0400; + } + if (i & (0x40 | 0x80)) { // 6/7 + v |= 0x0800; } } - - } else if (ew == -1) { - // wide mode - int hs = hsync_end_left_border; - visible_left_border = hs << currprefs.gfx_resolution; - if (visible_left_border + w > maxdiw) { - visible_left_border += (maxdiw - (visible_left_border + w) - 1) / 2; - } - if (visible_left_border < (hs << currprefs.gfx_resolution)) { - visible_left_border = hs << currprefs.gfx_resolution; + if (i & (0x04 | 0x08)) { // 2/3 + if (i & (0x10 | 0x20)) { // 4/5 + v |= 0x1000; + } + if (i & (0x40 | 0x80)) { // 6/7 + v |= 0x2000; + } } - } else if (ew < -1) { - // normal - visible_left_border = maxdiw - w; - } else { - if (vidinfo->drawbuffer.inxoffset < 0) { - visible_left_border = 0; - } else { - visible_left_border = (vidinfo->drawbuffer.inxoffset - DISPLAY_LEFT_SHIFT) << currprefs.gfx_resolution; + if (i & (0x10 | 0x20)) { // 4/5 + if (i & (0x40 | 0x80)) { // 6/7 + v |= 0x4000; + } } + sprcoltable[i] = v; } + for (int i = 0; i < 256; i++) { + uae_u16 v = 0; + if (i & (0x01 | 0x02)) { // 0/1 + v |= 0x02; + } + if (i & (0x04 | 0x08)) { // 2/3 + v |= 0x04; + } + if (i & (0x10 | 0x20)) { // 4/5 + v |= 0x08; + } + if (i & (0x40 | 0x80)) { // 6/7 + v |= 0x10; + } + sprbplcoltable[i] = v; + } + clxcon_bpl_enable_o = -1; + clxcon_bpl_match_o = -1; + expand_bplcon0(bplcon0_denise); + expand_bplcon1(bplcon1_denise); + expand_bplcon2(bplcon2_denise); + expand_bplcon3(bplcon3_denise); + expand_fmode(fmode_denise); + expand_colmask(); +} - if (visible_left_border > max_diwlastword - 32) - visible_left_border = max_diwlastword - 32; - if (visible_left_border < 0) - visible_left_border = 0; - visible_left_border &= ~((xshift (1, lores_shift)) - 1); - - //write_log (_T("%d %d %d %d %d\n"), max_diwlastword, vidinfo->drawbuffer.width, lores_shift, currprefs.gfx_resolution, visible_left_border); - - linetoscr_x_adjust_pixels = visible_left_border; - linetoscr_x_adjust_pixbytes = linetoscr_x_adjust_pixels * vidinfo->drawbuffer.pixbytes; - visible_right_border = maxdiw + w + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution); - if (visible_right_border > maxdiw + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution)) - visible_right_border = maxdiw + ((ew > 0 ? ew : 0) << currprefs.gfx_resolution); +// COLORxx write +static void update_color(int idx, uae_u16 v, uae_u16 con2, uae_u16 con3) +{ + if (aga_mode) { - int max_drawn_amiga_line_tmp = max_drawn_amiga_line; - if (max_drawn_amiga_line_tmp > vidinfo->drawbuffer.inheight) - max_drawn_amiga_line_tmp = vidinfo->drawbuffer.inheight; - max_drawn_amiga_line_tmp >>= linedbl; - - thisframe_y_adjust = minfirstline; - if (currprefs.gfx_ycenter && !fd->gfx_filter_autoscale) { + /* writing is disabled when RDRAM=1 */ + if (con2 & 0x0100) + return; - if (thisframe_first_drawn_line >= 0 && thisframe_last_drawn_line > thisframe_first_drawn_line) { + int colreg = ((con3 >> 13) & 7) * 32 + idx; + int r = (v & 0xF00) >> 8; + int g = (v & 0xF0) >> 4; + int b = (v & 0xF) >> 0; + int cr = (denise_colors.color_regs_aga[colreg] >> 16) & 0xFF; + int cg = (denise_colors.color_regs_aga[colreg] >> 8) & 0xFF; + int cb = denise_colors.color_regs_aga[colreg] & 0xFF; + + if (con3 & 0x200) { + cr &= 0xF0; cr |= r; + cg &= 0xF0; cg |= g; + cb &= 0xF0; cb |= b; + } else { + cr = r + (r << 4); + cg = g + (g << 4); + cb = b + (b << 4); + denise_colors.color_regs_genlock[colreg] = v >> 15; + } + uae_u32 cval = (cr << 16) | (cg << 8) | cb; - if (thisframe_last_drawn_line - thisframe_first_drawn_line < max_drawn_amiga_line_tmp && currprefs.gfx_ycenter == 2) - thisframe_y_adjust = (thisframe_last_drawn_line - thisframe_first_drawn_line - max_drawn_amiga_line_tmp) / 2 + thisframe_first_drawn_line; - else - thisframe_y_adjust = thisframe_first_drawn_line; + denise_colors.color_regs_aga[colreg] = cval; + denise_colors.acolors[colreg] = getxcolor(cval); + if (idx < 32) { + denise_colors.color_regs_ecs[idx] = ((cr >> 4) << 8) | ((cg >> 4) << 4) | (cb >> 4); + } - /* Would the old value be good enough? If so, leave it as it is if we want to be clever. */ - if (!center_reset && !horizontal_changed) { - if (currprefs.gfx_ycenter == 2 && thisframe_y_adjust != prev_y_adjust && abs(thisframe_y_adjust - prev_y_adjust) < 100) { - if (prev_y_adjust <= thisframe_first_drawn_line && prev_y_adjust + max_drawn_amiga_line_tmp > thisframe_last_drawn_line) - thisframe_y_adjust = prev_y_adjust; - } - } + if (!colreg) { + update_bordercolor(); + } - } else { + } else { - center_reset = 2; + if (!ecs_denise) { + v &= 0xfff; + } + denise_colors.color_regs_ecs[idx] = v & 0xfff; + denise_colors.color_regs_genlock[idx] = v >> 15; + denise_colors.acolors[idx] = getxcolor(v); + denise_colors.color_regs_aga[idx] = denise_colors.acolors[idx]; + if (!idx) { + update_bordercolor(); } - } - /* Make sure the value makes sense */ - if (thisframe_y_adjust + max_drawn_amiga_line_tmp > maxvpos + maxvpos / 2) - thisframe_y_adjust = maxvpos + maxvpos / 2 - max_drawn_amiga_line_tmp; - if (thisframe_y_adjust < 0) - thisframe_y_adjust = 0; + } +} - thisframe_y_adjust_real = thisframe_y_adjust << linedbl; - max_ypos_thisframe1 = (maxvpos_display - minfirstline + maxvpos_display_vsync) << linedbl; +static void hstart_new(void) +{ + // inside vblank: does not happen + if (!denise_vblank_active) { + bpl1dat_trigger = false; + sprites_hidden2 = bordersprite ? 0 : 3; + if (denise_hdiw) { + sprites_hidden2 &= ~1; + } + sprites_hidden = sprites_hidden2; + bplshiftcnt[0] = bplshiftcnt[1] = 0; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_BPL1DAT_HDIW, false); + } +#endif + } +} - if (prev_x_adjust != visible_left_border || prev_y_adjust != thisframe_y_adjust) { - int redraw = interlace_seen > 0 && linedbl ? 2 : 1; - if (redraw > ad->frame_redraw_necessary) - ad->frame_redraw_necessary = redraw; +static void do_exthblankon_ecs(void) +{ + // ECS Denise CSYNC programmed HBLANK + if (!denise_blank_active2 && denise_csync_blanken2) { + hstart_new(); + } + denise_blank_active2 = denise_csync_blanken2; + if (extblank != denise_csync_blanken2) { + extblank = denise_csync_blanken2; + if (!extblank) { + copy_strlong(); + memset(dtbuf, 0, sizeof(dtbuf)); + } } + if (delayed_sprite_vblank_ecs > 0 && denise_blank_active2) { + denise_sprite_blank_active = true; + delayed_sprite_vblank_ecs = 0; + } else if (delayed_sprite_vblank_ecs < 0 && denise_blank_active2) { + denise_sprite_blank_active = false; + delayed_sprite_vblank_ecs = 0; + } else { + denise_sprite_blank_active = false; + } + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; +} - max_diwstop = 0; - min_diwstart = MAX_STOP; +static void do_exthblankon_aga(void) +{ + // AGA programmed HBLANK + denise_blank_active2 = denise_phblank || denise_pvblank; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; +} - vidinfo->drawbuffer.xoffset = (DISPLAY_LEFT_SHIFT << RES_MAX) + (visible_left_border << (RES_MAX - currprefs.gfx_resolution)); - vidinfo->drawbuffer.yoffset = thisframe_y_adjust << VRES_MAX; +// BPL1DAT allows sprites 1 lores pixel before bitplanes +static void bpl1dat_enable_sprites(void) +{ + sprites_hidden2 &= ~2; + if (denise_hdiw) { + sprites_hidden2 &= ~1; + } +} +static void bpl1dat_enable_bpls(void) +{ + // A1000/OCS Denise: BPL1DAT won't open HDIW if BURST is active + if (ecs_denise || !denise_burst) { + bpl1dat_trigger = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_BPL1DAT_HDIW, true); + } +#endif + } +} +static void bpl1dat_enable_bpls_aga(void) +{ + bpl1dat_trigger = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_BPL1DAT_HDIW, true); + } +#endif +} - if (center_reset > 0) { - center_reset--; +// bpl1dat write -> copy all bplxdats to internal registers +// (must copy all, not just current plane count because if planecount +// is decreased mid line, old higher planes must be still shifted out) +static void bpldat_docopy(void) +{ + if (aga_mode) { + if (denise_bplfmode64) { + bplxdat2_64[0] = bplxdat_64[0]; + bplxdat2_64[1] = bplxdat_64[1]; + bplxdat2_64[2] = bplxdat_64[2]; + bplxdat2_64[3] = bplxdat_64[3]; + bplxdat2_64[4] = bplxdat_64[4]; + bplxdat2_64[5] = bplxdat_64[5]; + bplxdat2_64[6] = bplxdat_64[6]; + bplxdat2_64[7] = bplxdat_64[7]; + } else { + bplxdat2[0] = bplxdat[0]; + bplxdat2[1] = bplxdat[1]; + bplxdat2[2] = bplxdat[2]; + bplxdat2[3] = bplxdat[3]; + bplxdat2[4] = bplxdat[4]; + bplxdat2[5] = bplxdat[5]; + bplxdat2[6] = bplxdat[6]; + bplxdat2[7] = bplxdat[7]; + } + } else { + bplxdat2[0] = bplxdat[0]; + bplxdat2[1] = bplxdat[1]; + bplxdat2[2] = bplxdat[2]; + bplxdat2[3] = bplxdat[3]; + bplxdat2[4] = bplxdat[4]; + bplxdat2[5] = bplxdat[5]; + } + + bpldat_copy[0] = true; + bpldat_copy[1] = true; + + if (debug_bpl_mask != 0xff) { + for (int i = 0; i < MAX_PLANES; i++) { + if (!(debug_bpl_mask & (1 << i))) { + bplxdat2[i] = 0; + bplxdat2_64[i] = 0; + } + } } - horizontal_changed = false; - vertical_changed = false; } -static int frame_res_cnt; -static int autoswitch_old_resolution; -static void init_drawing_frame (void) +static void expand_drga_early2x(struct denise_rga* rd) { - struct amigadisplay *ad = &adisplays[0]; - struct vidbuf_description *vidinfo = &ad->gfxvidinfo; - static int frame_res_old; + switch (rd->rga) + { + case 0x10c: + expand_bplcon4_spr(rd->v); + break; + } +} - int largest_res = 0; - int largest_count = 0; - int largest_count_res = 0; - for (int i = 0; i <= RES_MAX; i++) { - if (resolution_count[i]) - largest_res = i; - if (resolution_count[i] >= largest_count) { - largest_count = resolution_count[i]; - largest_count_res = i; +static void expand_drga_early(struct denise_rga* rd) +{ + if (rd->rga >= 0x180 && rd->rga < 0x180 + 32 * 2) { + int idx = (rd->rga - 0x180) / 2; + if (aga_delayed_color_idx >= 0) { + update_color(aga_delayed_color_idx, aga_delayed_color_val, bplcon2_denise, bplcon3_denise); + aga_delayed_color_idx = -1; + } + if (aga_mode && (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA || !denise_vblank_active)) { + // AGA color changes are 1 hires pixel delayed + aga_delayed_color_idx = idx; + aga_delayed_color_val = rd->v; + aga_delayed_color_con2 = bplcon2_denise; + aga_delayed_color_con3 = bplcon3_denise; + aga_unalign0++; + } else { + update_color(idx, rd->v, bplcon2_denise, bplcon3_denise); } - } - if (currprefs.gfx_resolution == changed_prefs.gfx_resolution && lines_count > 0) { - detected_screen_resolution = largest_res; } - if (currprefs.gfx_resolution == changed_prefs.gfx_resolution && lines_count > 0) { + switch (rd->rga) + { + case 0x144: case 0x146: + case 0x14c: case 0x14e: + case 0x154: case 0x156: + case 0x15c: case 0x15e: + case 0x164: case 0x166: + case 0x16c: case 0x16e: + case 0x174: case 0x176: + case 0x17c: case 0x17e: + if (denise_sprfmode64) { + sprwrite_64(rd->rga - 0x140, rd->v64); + } else { + sprwrite(rd->rga - 0x140, rd->v); + } + break; - if (currprefs.gfx_autoresolution_vga && programmedmode == 1 && vidinfo->gfx_resolution_reserved >= RES_HIRES && vidinfo->gfx_vresolution_reserved >= VRES_DOUBLE) { - if (largest_res == RES_SUPERHIRES && (vidinfo->gfx_resolution_reserved < RES_SUPERHIRES || vidinfo->gfx_vresolution_reserved < 1)) { - // enable full doubling/superhires support if programmed mode. It may be "half-width" only and may fit in normal display window. - vidinfo->gfx_resolution_reserved = RES_SUPERHIRES; - vidinfo->gfx_vresolution_reserved = VRES_DOUBLE; - graphics_reset(false); - } - int newres = RES_HIRES; - int hres = (2 * htotal) << largest_res; - if (hres > 1150) { - newres = RES_SUPERHIRES; + case 0x100: + expand_bplcon0_early(rd->v); + break; + + case 0x10c: + expand_bplcon4_bm(rd->v); + break; + + // BPL1DAT sprite enable is 2 lores pixels earlier + // BPL1DAT bitplane enable is 1 lores pixel earlier (AGA has extra 1 hires pixel) + case 0x110: + bpl1dat_enable_sprites(); + if (!bpl1dat_trigger) { + // need 1 lores pixel delay + // skip delay if DIW is not open + if (!denise_hdiw) { + bpl1dat_enable_bpls(); } else { - newres = RES_HIRES; - } - if (newres < RES_HIRES) { - newres = RES_HIRES; - } - if (newres > RES_MAX) { - newres = RES_MAX; - } - if (changed_prefs.gfx_resolution != newres) { - autoswitch_old_resolution = RES_HIRES; - write_log(_T("Programmed mode autores = %d -> %d (%d)\n"), changed_prefs.gfx_resolution, newres, largest_res); - changed_prefs.gfx_resolution = newres; - set_config_changed(); - return; - } - } else if (autoswitch_old_resolution == RES_HIRES) { - autoswitch_old_resolution = 0; - if (changed_prefs.gfx_resolution != RES_HIRES) { - changed_prefs.gfx_resolution = RES_HIRES; - set_config_changed(); - return; + bpl1dat_unalign = true; + aga_unalign0 += 2; + aga_unalign1 += 2; } } + break; + } - if (currprefs.gfx_autoresolution) { - int frame_res_detected; - int frame_res_lace_detected = frame_res_lace; +} - if (currprefs.gfx_autoresolution == 1 || currprefs.gfx_autoresolution >= 100) - frame_res_detected = largest_res; - else if (largest_count * 100 / lines_count >= currprefs.gfx_autoresolution) - frame_res_detected = largest_count_res; - else - frame_res_detected = largest_count_res - 1; - if (frame_res_detected < 0) - frame_res_detected = 0; - #if 0 - static int delay; - delay--; - if (delay < 0) { - delay = 50; - write_log (_T("%d %d, %d %d %d, %d %d, %d %d\n"), currprefs.gfx_autoresolution, lines_count, resolution_count[0], resolution_count[1], resolution_count[2], - largest_count, largest_count_res, frame_res_detected, frame_res_lace_detected); +static void expand_drga_blanken(struct denise_rga *rd) +{ + if (rd->flags) { + if (rd->flags & DENISE_RGA_FLAG_BLANKEN_CSYNC) { + // + 0.5CCK extra delay + if (rd->flags & DENISE_RGA_FLAG_BLANKEN_CSYNC_ON) { + if (!denise_csync_blanken) { + memset(dtbuf, 0, sizeof(dtbuf)); + } + denise_csync_blanken = true; + } else { + denise_csync_blanken = false; } - #endif - if (frame_res_detected >= 0 && frame_res_lace_detected >= 0) { - if (frame_res_cnt > 0 && frame_res_old == frame_res_detected * 2 + frame_res_lace_detected) { - frame_res_cnt--; - if (frame_res_cnt == 0) { - int m = frame_res_detected * 2 + frame_res_lace_detected; - struct wh *dst = currprefs.gfx_apmode[0].gfx_fullscreen ? &changed_prefs.gfx_monitor[0].gfx_size_fs : &changed_prefs.gfx_monitor[0].gfx_size_win; - struct wh *src = currprefs.gfx_apmode[0].gfx_fullscreen ? &currprefs.gfx_monitor[0].gfx_size_fs_xtra[m] : &currprefs.gfx_monitor[0].gfx_size_win_xtra[m]; - int nr = m >> 1; - int nl = (m & 1) == 0 ? 0 : 1; - int nr_o = nr; - int nl_o = nl; + } + } +} - if (currprefs.gfx_autoresolution >= 100 && nl == 0 && nr > 0) { - nl = 1; - } - if (currprefs.gfx_autoresolution_minh < 0) { - if (nr < nl) - nr = nl; - } else if (nr < currprefs.gfx_autoresolution_minh) { - nr = currprefs.gfx_autoresolution_minh; - } - if (currprefs.gfx_autoresolution_minv < 0) { - if (nl < nr) - nl = nr; - } else if (nl < currprefs.gfx_autoresolution_minv) { - nl = currprefs.gfx_autoresolution_minv; - } +static void handle_strobes(struct denise_rga *rd) +{ + if (ecs_denise) { - if (nr > vidinfo->gfx_resolution_reserved) - nr = vidinfo->gfx_resolution_reserved; - if (nl > vidinfo->gfx_vresolution_reserved) - nl = vidinfo->gfx_vresolution_reserved; + if (rd->rga == 0x03c && previous_strobe != 0x03c) { + delayed_vblank_ecs = -1; + delayed_sprite_vblank_ecs = -1; + } else if (rd->rga != 0x03c && previous_strobe == 0x03c) { + delayed_vblank_ecs = 1; + delayed_sprite_vblank_ecs = 1; + } - if (changed_prefs.gfx_resolution != nr || changed_prefs.gfx_vresolution != nl) { - changed_prefs.gfx_resolution = nr; - changed_prefs.gfx_vresolution = nl; + denise_hcounter_new = 1 * 2; - write_log(_T("RES -> %d (%d) LINE -> %d (%d) (%d - %d, %d - %d)\n"), nr, nr_o, nl, nl_o, - currprefs.gfx_autoresolution_minh, currprefs.gfx_autoresolution_minv, - vidinfo->gfx_resolution_reserved, vidinfo->gfx_vresolution_reserved); - set_config_changed(); - } - if (src->width > 0 && src->height > 0) { - if (memcmp(dst, src, sizeof(*dst))) { - *dst = *src; - set_config_changed(); - } - } - frame_res_cnt = currprefs.gfx_autoresolution_delay; - } - } else { - frame_res_old = frame_res_detected * 2 + frame_res_lace_detected; - frame_res_cnt = currprefs.gfx_autoresolution_delay; - if (frame_res_cnt <= 0) - frame_res_cnt = 1; + } else { + + if (rd->rga == 0x03c && previous_strobe != 0x03c) { + denise_vblank = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_VB, false); + } +#endif + } else if (rd->rga == 0x038 && previous_strobe != 0x038) { + denise_vblank = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_VB, true); + } +#endif + } + denise_vblank_active = denise_vblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + // OCS Denise hcounter only resets if STRHOR or STRVBL. + // STREQU does not reset it. 9-bit counter is free-running. + if (rd->rga == 0x03a || rd->rga == 0x03c) { + denise_hcounter_new = 1 * 2; + } + } + if (rd->rga == 0x03c && previous_strobe != 0x03c) { + linear_denise_vbstrt = linear_vpos; + } else if (rd->rga != 0x03c && previous_strobe == 0x03c) { + linear_denise_vbstop = linear_vpos; + denise_visible_lines = 0; + } + if (rd->rga == 0x03c && previous_strobe == 0x03c) { + denise_visible_lines++; + } + previous_strobe = rd->rga; + previous_strobe_flag = rd->flags; + reset_strlong(); + spr_nearest(); +} + +static void expand_drga(struct denise_rga *rd) +{ + if (rd->flags) { + if (rd->flags & DENISE_RGA_FLAG_SYNC) { + denise_csync = (rd->flags & DENISE_RGA_FLAG_CSYNC) != 0; + denise_vsync = (rd->flags & DENISE_RGA_FLAG_VSYNC) != 0; + denise_hsync = (rd->flags & DENISE_RGA_FLAG_HSYNC) != 0; + } + if ((rd->flags & DENISE_RGA_FLAG_LOL)) { + agnus_lol = (rd->flags & DENISE_RGA_FLAG_LOL_ON) != 0; + if (!agnus_lol && !denise_lol_shift_prev) { + int add = 1 << currprefs.gfx_resolution; + buf1 += add; + buf2 += add; + buf_d += add; + if (gbuf) { + gbuf += add; + } + denise_lol_shift_prev = add; + } else if (agnus_lol && denise_lol_shift_prev) { + buf1 -= denise_lol_shift_prev; + buf2 -= denise_lol_shift_prev; + buf_d -= denise_lol_shift_prev; + if (gbuf) { + gbuf -= denise_lol_shift_prev; } + denise_lol_shift_prev = 0; + } + } + } + + switch (rd->rga) + { + case 0x02c: + denise_hcounter_new = (rd->v & 0xff) * 2; + spr_nearest(); + break; + case 0x038: // STREQU + case 0x03a: // STRVBL + case 0x03c: // STRHOR + handle_strobes(rd); + break; + case 0x03e: // STRLONG + set_strlong(); + break; + + case 0x140: case 0x142: + case 0x148: case 0x14a: + case 0x150: case 0x152: + case 0x158: case 0x15a: + case 0x160: case 0x162: + case 0x168: case 0x16a: + case 0x170: case 0x172: + case 0x178: case 0x17a: + sprwrite(rd->rga - 0x140, rd->v); + break; + + case 0x110: + if (aga_mode) { + if (denise_bplfmode64) { + bplxdat_64[0] = rd->v64; + } else { + bplxdat[0] = rd->v; } + } else { + bplxdat[0] = rd->v; } - } - for (int i = 0; i <= RES_MAX; i++) - resolution_count[i] = 0; - lines_count = 0; - frame_res = -1; - frame_res_lace = 0; + bpldat_docopy(); + if (bpldat_fmode != denise_bplfmode) { + bpldat_fmode = denise_bplfmode; + update_fmode(); + select_lts(); + } + break; + case 0x112: + case 0x114: + case 0x116: + case 0x118: + case 0x11a: + case 0x11c: + case 0x11e: + if (denise_bplfmode64) { + bplxdat_64[(rd->rga - 0x110) / 2] = rd->v64; + } else { + bplxdat[(rd->rga - 0x110) / 2] = rd->v; + } + break; - if (can_use_lores > AUTO_LORES_FRAMES && 0) { - lores_factor = 1; - lores_set(0); - } else { - can_use_lores++; - lores_reset(); - } + case 0x100: + expand_bplcon0(rd->v); + break; + case 0x102: + expand_bplcon1(rd->v); + break; + case 0x104: + expand_bplcon2(rd->v); + break; + case 0x106: + expand_bplcon3(rd->v); + break; + case 0x08e: + denise_diwstrt = rd->v; + diwhigh_written = false; + calchdiw(); + break; + case 0x090: + denise_diwstop = rd->v; + diwhigh_written = false; + calchdiw(); + break; + case 0x1e4: + if (rd->v != denise_diwhigh2 || rd->v != denise_diwhigh || !diwhigh_written) { + if (!aga_mode) { + reswitch_unalign++; + denise_diwhigh2 = rd->v; + } else { + denise_diwhigh = rd->v; + diwhigh_written = true; + calchdiw(); + } + } + break; + case 0x1fc: + expand_fmode(rd->v); + break; + case 0x098: + expand_clxcon(rd->v); + break; + case 0x10e: + expand_clxcon2(rd->v); + break; + case 0x1c4: + hbstrt_denise_reg = rd->v; + update_hblank(); + break; + case 0x1c6: + hbstop_denise_reg = rd->v; + update_hblank(); + break; - init_hardware_for_drawing_frame (); + } +} - if (thisframe_first_drawn_line < 0) - thisframe_first_drawn_line = minfirstline; - if (thisframe_first_drawn_line > thisframe_last_drawn_line) - thisframe_last_drawn_line = thisframe_first_drawn_line; +void denise_update_reg(uae_u16 reg, uae_u16 v) +{ + struct denise_rga dr = { 0 }; + dr.rga = reg; + dr.v = v; + expand_drga_early2x(&dr); + expand_drga_early(&dr); + expand_drga(&dr); + lts_request = true; +} - int maxline = ((maxvpos_display + maxvpos_display_vsync + 1) << linedbl) + 2; - for (int i = 0; i < maxline; i++) { - int ls = linestate[i]; - switch (ls) { - case LINE_DONE_AS_PREVIOUS: - linestate[i] = LINE_REMEMBERED_AS_PREVIOUS; - break; - case LINE_REMEMBERED_AS_BLACK: - break; - default: - linestate[i] = LINE_UNDECIDED; - break; +// AGA HAM +static uae_u32 decode_ham_pixel_aga(uint8_t pw) +{ + if (denise_planes >= 7) { /* AGA mode HAM8 */ + int pv = pw ^ bplcon4_denise_xor_val; + int pc = pv >> 2; + switch (pv & 0x3) + { + case 0x0: ham_lastcolor = denise_colors.color_regs_aga[pc]; break; + case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pw & 0xFC); break; + case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pw & 0xFC) << 16; break; + case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pw & 0xFC) << 8; break; + } + } else { /* AGA mode HAM6 */ + int pv = pw ^ bplcon4_denise_xor_val; + uae_u32 pc = ((pw & 0xf) << 0) | ((pw & 0xf) << 4); + switch (pv & 0x30) + { + case 0x00: ham_lastcolor = denise_colors.color_regs_aga[pv & 0x0f]; break; + case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break; + case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break; + case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break; } } - last_drawn_line = 0; - first_drawn_line = 32767; + return CONVERT_RGB(ham_lastcolor); +} - if (ad->frame_redraw_necessary) { - reset_decision_table(); - ad->custom_frame_redraw_necessary = 1; - ad->frame_redraw_necessary--; +// OCS/ECS HAM +static uae_u32 decode_ham_pixel(uint8_t pv) +{ + if (!bpldualpf) { + /* OCS/ECS mode HAM6 */ + switch (pv & 0x30) + { + case 0x00: ham_lastcolor = denise_colors.color_regs_ecs[pv]; break; + case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; + case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; + case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; + } } else { - ad->custom_frame_redraw_necessary = 0; + /* OCS/ECS mode HAM6 + DPF */ + int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; + int idx = lookup[pv]; + switch (pv & 0x30) + { + case 0x00: ham_lastcolor = denise_colors.color_regs_ecs[idx]; break; + case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (idx & 0xF); break; + case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (idx & 0xF) << 8; break; + case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (idx & 0xF) << 4; break; + } } - - center_image (); - - thisframe_first_drawn_line = -1; - thisframe_last_drawn_line = -1; - - drawing_color_matches = -1; + return p_xcolors[ham_lastcolor]; } -static int lightpen_y1[2], lightpen_y2[2]; - -void putpixel(uae_u8 *buf, uae_u8 *genlockbuf, int bpp, int x, xcolnr c8) +static uint8_t decode_denise_specials(uint8_t pix) { - if (x <= 0) - return; + if (decode_specials == 1) { + // Emulate OCS/ECS only undocumented "SWIV" hardware feature: + // PF2 >= 5 and bit in plane 5 set: other planes are ignored in color selection. + if (pix & 0x10) { + pix = 0x10; + } + } else if (decode_specials == 2) { + // If PFx is invalid (>=5), matching playfield's color becomes transparent + // (COLOR00). Priorities keep working normally: "transparent" playfield + // will still hide lower priority playfield behind it. + // Logo in Running man / Scoopex + uae_u8 mask1 = 0x01 | 0x04 | 0x10; + uae_u8 mask2 = 0x02 | 0x08 | 0x20; + if (plf1pri >= 5 && (pix & mask1)) { + pix |= 0x40; + } + if (plf2pri >= 5 && (pix & mask2)) { + pix |= 0x80; + } + } + return pix; +} - if (genlockbuf) - genlockbuf[x] = 0xff; +static uae_u32 decode_pixel_aga(uint8_t pix) +{ + switch (bplmode) + { + default: + return denise_colors.acolors[pix ^ bplcon4_denise_xor_val]; + case CMODE_DUALPF: + { + uae_u8 val = dpf_lookup[pix]; + if (dpf_lookup_no[pix]) { + val += dblpfofs[bpldualpf2of]; + } + val ^= bplcon4_denise_xor_val; + return denise_colors.acolors[val]; + } + case CMODE_EXTRAHB: + { + pix ^= bplcon4_denise_xor_val; + if (pix & 0x20) { + uae_u32 v = (denise_colors.color_regs_aga[pix & 0x1f] >> 1) & 0x7f7f7f; + return CONVERT_RGB(v); + } else { + return denise_colors.acolors[pix]; + } + } + case CMODE_HAM: + { + return decode_ham_pixel_aga(pix); + } + case CMODE_EXTRAHB_ECS_KILLEHB: + { + pix ^= bplcon4_denise_xor_val; + return denise_colors.acolors[pix & 31]; + } + } +} - switch (bpp) { - case 1: - buf[x] = (uae_u8)c8; - break; - case 2: +static uae_u32 decode_pixel(uint8_t pix) +{ + switch (bplmode) + { + default: + return denise_colors.acolors[pix]; + case CMODE_DUALPF: { - uae_u16 *p = (uae_u16*)buf + x; - *p = (uae_u16)c8; - break; + uae_u8 val = dpf_lookup[pix]; + return denise_colors.acolors[val]; } - case 3: - /* no 24 bit yet */ - break; - case 4: + case CMODE_EXTRAHB: { - uae_u32 *p = (uae_u32*)buf + x; - *p = c8; - break; + pix &= bplehb_mask; + if (pix <= 31) { + return denise_colors.acolors[pix]; + } else { + return p_xcolors[(denise_colors.color_regs_ecs[pix - 32] >> 1) & 0x777]; + } + } + case CMODE_HAM: + { + return decode_ham_pixel(pix); } } } -static uae_u8 *status_line_ptr(int monid, int line) +static uae_u8 denise_render_sprites2(uae_u8 apixel, uae_u32 vs) { - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - int y; + uae_u8 c = vs >> 16; + uae_u16 v = (uae_u16)vs; + if (currprefs.collision_level) { + // Sprite to sprite collisiomns + clxdat |= sprcoltable[c & sprcolmask]; + // Sprite to bitplane collisions + if ((c & sprcolmask) && currprefs.collision_level > 1) { + if (bpldualpf) { + if ((apixel & clxcon_bpl_enable_aa) == clxcon_bpl_match_aa) { + clxdat |= sprbplcoltable[c & sprcolmask] << 4; + } + if ((apixel & clxcon_bpl_enable_55) == clxcon_bpl_match_55) { + clxdat |= sprbplcoltable[c & sprcolmask] << 0; + } + } else { + if ((apixel & clxcon_bpl_enable_aa) == clxcon_bpl_match_aa) { + clxdat |= sprbplcoltable[c & sprcolmask] << 4; + if ((apixel & clxcon_bpl_enable_55) == clxcon_bpl_match_55) { + clxdat |= sprbplcoltable[c & sprcolmask] << 0; + } + } + } + } + } + int *shift_lookup = bpldualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms; + int maskshift, plfmask; + maskshift = shift_lookup[apixel]; + // The value in the shift lookup table is _half_ the shift count we + // need. This is because we can't shift 32 bits at once (undefined + // behaviour in C) + plfmask = (plf_sprite_mask >> maskshift) >> maskshift; + v &= ~plfmask; + v &= debug_sprite_mask; + if (v) { + int vlo, vhi, col; + int v1 = v & 255; + // OFFS determines the sprite pair with the highest priority that has + // any bits set. E.g. if we have 0xFF00 in the buffer, we have sprite + // pairs 01 and 23 cleared, and pairs 45 and 67 set, so OFFS will + // have a value of 4. + // 2 * OFFS is the bit number in V of the sprite pair, and it also + // happens to be the color offset for that pair. + int offs; + if (v1 == 0) + offs = 4 + sprite_offs[v >> 8]; + else + offs = sprite_offs[v1]; + v >>= offs * 2; + v &= 15; + if (dspr[offs].attached) { + col = v; + if (aga_mode) + col += sbasecol[1]; + else + col += 16; + } else { + // This sequence computes the correct color value. We have to select + // either the lower-numbered or the higher-numbered sprite in the pair. + // We have to select the high one if the low one has all bits zero. + // If the lower-numbered sprite has any bits nonzero, (VLO - 1) is in + // the range of 0..2, and with the mask and shift, VHI will be zero. + // If the lower-numbered sprite is zero, (VLO - 1) is a mask of + // 0xFFFFFFFF, and we select the bits of the higher numbered sprite + // in VHI. + // This is _probably_ more efficient than doing it with branches. + vlo = v & 3; + vhi = (v & (vlo - 1)) >> 2; + col = (vlo | vhi); + if (aga_mode) { + if (vhi > 0) + col += sbasecol[1]; + else + col += sbasecol[0]; + } else { + col += 16; + } + col += offs * 2; + } + return col; + } + return 0; +} - y = line - (vidinfo->drawbuffer.outheight - TD_TOTAL_HEIGHT); - xlinebuffer = vidinfo->drawbuffer.linemem; - if (xlinebuffer == 0) - xlinebuffer = row_map[line]; - xlinebuffer_genlock = row_map_genlock[line]; - return xlinebuffer; +static void get_shres_spr_pix(uae_u32 sv0, uae_u32 sv1, uae_u32 *dpix0, uae_u32 *dpix1) +{ + uae_u16 v; + uae_u8 p0 = denise_render_sprites2(0, sv0); + uae_u8 p1 = denise_render_sprites2(0, sv1); + uae_u8 off = ((p1 & 3) * 4) + (p0 & 3) + ((p0 | p1) & 16); + if (p0) { + v = (denise_colors.color_regs_ecs[off] & 0xccc) << 0; + v |= v >> 2; + *dpix0 = xcolors[v]; + } + if (p1) { + v = (denise_colors.color_regs_ecs[off] & 0x333) << 2; + v |= v >> 2; + *dpix1 = xcolors[v]; + } } -static void draw_status_line(int monid, int line, int statusy) +static void spr_disarms(uae_u32 mask) { - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - uae_u8 *buf = status_line_ptr(monid, line); - if (!buf) - return; - if (statusy < 0) - statusline_render(monid, buf, vidinfo->drawbuffer.pixbytes, vidinfo->drawbuffer.rowbytes, vidinfo->drawbuffer.outwidth, TD_TOTAL_HEIGHT, xredcolors, xgreencolors, xbluecolors, NULL); - else - draw_status_line_single(monid, buf, vidinfo->drawbuffer.pixbytes, statusy, vidinfo->drawbuffer.outwidth, xredcolors, xgreencolors, xbluecolors, NULL); + int num = 0; + while (mask && num < MAX_SPRITES) { + if (mask & (1 << num)) { + struct denise_spr *sp = &dspr[num]; + spr_arms(sp, 0); + } + num++; + } } -static void draw_debug_status_line(int monid, int line) +static void denise_shift_sprites_aga(int shift) { - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - xlinebuffer = vidinfo->drawbuffer.linemem; - if (xlinebuffer == 0) - xlinebuffer = row_map[line]; - xlinebuffer_genlock = row_map_genlock[line]; - debug_draw(xlinebuffer, vidinfo->drawbuffer.pixbytes, line, vidinfo->drawbuffer.outwidth, vidinfo->drawbuffer.outheight, xredcolors, xgreencolors, xbluecolors); + int sidx = 0; + while (dprspts[sidx]) { + struct denise_spr *sp = dprspts[sidx]; + if (denise_sprfmode64) { + sp->dataas64 <<= shift; + sp->databs64 <<= shift; + } else { + sp->dataas <<= shift; + sp->databs <<= shift; + } + sidx++; + } +} + +static uae_u32 denise_render_sprites_aga(int add) +{ + uae_u32 v = 0; + uae_u32 d = 0; + int sidx = 0; + while (dprspts[sidx]) { + struct denise_spr *sp = dprspts[sidx]; + int num = sp->num; + int pix = sp->pix; + v |= pix << (num * 2); + v |= pix ? (1 << (num + 16)) : 0; + sp->shift -= add; + if (sp->shift <= 0) { + int shift = 1; + if (sp->shift < 0) { + // skip pixels if sprite res > display res + shift = sp->shift < -denise_spr_shiftsize ? 4 : 2; + } + sp->shift = denise_spr_shiftsize; + if (denise_sprfmode64) { + if (!sp->dataas64 && !sp->databs64) { + d |= 1 << num; + } + sp->pix = ((sp->dataas64 >> 63) & 1) << 0; + sp->pix |= ((sp->databs64 >> 63) & 1) << 1; + sp->dataas64 <<= shift; + sp->databs64 <<= shift; + } else { + if (!sp->dataas && !sp->databs) { + d |= 1 << num; + } + sp->pix = ((sp->dataas >> 31) & 1) << 0; + sp->pix |= ((sp->databs >> 31) & 1) << 1; + sp->dataas <<= shift; + sp->databs <<= shift; + } + } + sidx++; + } + if (d) { + spr_disarms(d); + } + return v; } -#define LIGHTPEN_HEIGHT 12 -#define LIGHTPEN_WIDTH 17 +static uae_u32 denise_render_sprites(void) +{ + uae_u32 v = 0; + uae_u32 d = 0; + int sidx = 0; + while (dprspts[sidx]) { + struct denise_spr *sp = dprspts[sidx]; + int num = sp->num; + int pix = sp->pix; + v |= pix << (num * 2); + v |= pix ? (1 << (num + 16)) : 0; + sp->shift--; + if (sp->shift <= 0) { + sp->shift = denise_spr_shiftsize; + if (!sp->dataas && !sp->databs) { + d |= 1 << num; + } + sp->pix = ((sp->dataas >> 31) & 1) << 0; + sp->pix |= ((sp->databs >> 31) & 1) << 1; + sp->dataas <<= 1; + sp->databs <<= 1; + } + sidx++; + } + if (d) { + spr_disarms(d); + } + return v; +} +static uae_u32 denise_render_sprites_lores(void) +{ + uae_u32 v = 0; + uae_u32 d = 0; + int sidx = 0; + while (dprspts[sidx]) { + struct denise_spr *sp = dprspts[sidx]; + int num = sp->num; + int pix = sp->pix; + v |= pix << (num * 2); + v |= pix ? (1 << (num + 16)) : 0; + if (!sp->dataas && !sp->databs) { + d |= 1 << num; + } + sp->pix = ((sp->dataas >> 31) & 1) << 0; + sp->pix |= ((sp->databs >> 31) & 1) << 1; + sp->dataas <<= 1; + sp->databs <<= 1; + sidx++; + } + if (d) { + spr_disarms(d); + } + return v; +} -static const char *lightpen_cursor = { - "------.....------" - "------.xxx.------" - "------.xxx.------" - "------.xxx.------" - ".......xxx......." - ".xxxxxxxxxxxxxxx." - ".xxxxxxxxxxxxxxx." - ".......xxx......." - "------.xxx.------" - "------.xxx.------" - "------.xxx.------" - "------.....------" -}; +static uae_u32 denise_render_sprites_ecs_shres(void) +{ + uae_u32 v = 0; + uae_u32 d = 0; + for (int s = 0; s < 4; s++) { + struct denise_spr *sp = &dspr[s]; + int num = sp->num; + int pix = sp->pix; + v |= pix << (num * 2); + v |= pix ? (1 << (num + 16)) : 0; + sp->shift -= 2; + if (sp->shift <= 0) { + sp->shift = denise_spr_shiftsize; + if (!sp->dataas && !sp->databs) { + d |= 1 << num; + } + sp->pix = ((sp->dataas >> 31) & 1) << 0; + sp->pix |= ((sp->databs >> 31) & 1) << 1; + sp->dataas <<= 1; + sp->databs <<= 1; + } + } + return v; +} -static void draw_lightpen_cursor(int monid, int x, int y, int line, int onscreen, int lpnum) +static void do_hbstrt(int cnt) { - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - const char *p; - int color1 = onscreen ? (lpnum ? 0x0ff : 0xff0) : (lpnum ? 0x0f0 : 0xf00); - int color2 = (color1 & 0xeee) >> 1; - - xlinebuffer = vidinfo->drawbuffer.linemem; - if (xlinebuffer == 0) - xlinebuffer = row_map[line]; - xlinebuffer_genlock = row_map_genlock[line]; - - p = lightpen_cursor + y * LIGHTPEN_WIDTH; - for (int i = 0; i < LIGHTPEN_WIDTH; i++) { - int xx = x + i - LIGHTPEN_WIDTH / 2; - if (*p != '-' && xx >= 0 && xx < vidinfo->drawbuffer.outwidth) { - putpixel(xlinebuffer, xlinebuffer_genlock, vidinfo->drawbuffer.pixbytes, xx, *p == 'x' ? xcolors[color1] : xcolors[color2]); + denise_hblank = true; + if (!exthblankon_ecs) { + if (delayed_vblank_ecs > 0) { +#ifdef DEBUGGER + if (debug_dma && !denise_vblank) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_VB, true); + } +#endif + denise_vblank = true; + delayed_vblank_ecs = 0; + } + denise_hblank_active = denise_hblank; + denise_vblank_active = denise_vblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + denise_sprite_blank_active = denise_blank_active; + hstart_new(); + linear_denise_hbstrt = cnt; + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HB, true); + } +#endif +} +static void do_hbstop(int cnt) +{ + denise_hblank = false; + if (!exthblankon_ecs) { + if (delayed_vblank_ecs < 0) { +#ifdef DEBUGGER + if (debug_dma && denise_vblank) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_VB, false); + } +#endif + denise_vblank = false; + delayed_vblank_ecs = 0; } - p++; + denise_hblank_active = denise_hblank; + denise_vblank_active = denise_vblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + denise_sprite_blank_active = denise_blank_active; + linear_denise_hbstop = cnt; + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HB, false); } +#endif } -static void lightpen_update(struct vidbuffer *vb, int lpnum) +static void do_phbstrt_aga(int cnt) { - struct vidbuf_description *vidinfo = &adisplays[vb->monitor_id].gfxvidinfo; - if (lightpen_x[lpnum] < 0 && lightpen_y[lpnum] < 0) - return; - - bool out = false; - int extra = 2; + denise_phblank = true; + if (exthblankon_aga) { + if (delayed_vblank_ecs > 0) { + denise_pvblank = true; + delayed_vblank_ecs = 0; + denise_vblank_active = denise_pvblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + } + hstart_new(); + linear_denise_hbstrt = cnt; + do_exthblankon_aga(); + copy_strlong(); + denise_sprite_blank_active = denise_blank_active; + } +} +static void do_phbstop_aga(int cnt) +{ + denise_phblank = false; + if (exthblankon_aga) { + if (delayed_vblank_ecs < 0) { + denise_pvblank = false; + delayed_vblank_ecs = 0; + denise_vblank_active = denise_pvblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + } + do_exthblankon_aga(); + denise_sprite_blank_active = denise_blank_active; + linear_denise_hbstop = cnt; + } +} - if (lightpen_x[lpnum] < -extra) - lightpen_x[lpnum] = -extra; - if (lightpen_x[lpnum] >= vidinfo->drawbuffer.inwidth + extra) - lightpen_x[lpnum] = vidinfo->drawbuffer.inwidth + extra; - if (lightpen_y[lpnum] < -extra) - lightpen_y[lpnum] = -extra; - if (lightpen_y[lpnum] >= vidinfo->drawbuffer.inheight + extra) - lightpen_y[lpnum] = vidinfo->drawbuffer.inheight + extra; - if (lightpen_y[lpnum] >= max_ypos_thisframe1) - lightpen_y[lpnum] = max_ypos_thisframe1; +static void do_phbstrt_ecs(int cnt) +{ + denise_phblank = true; + if (exthblankon_ecs) { + if (delayed_vblank_ecs > 0) { + denise_pvblank = true; + delayed_vblank_ecs = 0; + denise_vblank_active = denise_pvblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + denise_sprite_blank_active = denise_blank_active; + } + hstart_new(); + do_exthblankon_ecs(); + linear_denise_hbstrt = cnt; + } +} +static void do_phbstop_ecs(int cnt) +{ + denise_phblank = false; + if (exthblankon_ecs) { + if (delayed_vblank_ecs < 0) { + denise_pvblank = false; + delayed_vblank_ecs = 0; + denise_vblank_active = denise_pvblank; + denise_blank_active2 = denise_hblank_active || denise_vblank_active; + denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false; + denise_sprite_blank_active = denise_blank_active; + } + do_exthblankon_ecs(); + linear_denise_hbstop = cnt; + } +} - if (lightpen_x[lpnum] < 0 || lightpen_y[lpnum] < 0) { - out = true; +static void do_hstrt_aga(int cnt) +{ + denise_hdiw = true; + sprites_hidden2 &= ~1; + sprites_hidden = sprites_hidden2; + if (cnt < diwfirstword_total) { + diwfirstword_total = cnt; } - if (lightpen_x[lpnum] >= vidinfo->drawbuffer.inwidth) { - out = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HDIW, true); } - if (lightpen_y[lpnum] >= max_ypos_thisframe1) { - out = true; +#endif +} +static void do_hstop_aga(int cnt) +{ + sprites_hidden2 |= sprite_hidden_mask; + sprites_hidden = sprites_hidden2; + denise_hdiw = false; + if (cnt > diwlastword_total) { + diwlastword_total = cnt; + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HDIW, false); + } +#endif +} +static void do_hstrt_ecs(int cnt) +{ + denise_hdiw = true; + sprites_hidden2 &= ~1; + sprites_hidden = sprites_hidden2; + if (cnt < diwfirstword_total) { + diwfirstword_total = cnt; + } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HDIW, true); + } +#endif +} +static void do_hstop_ecs(int cnt) +{ + denise_hdiw = false; + if (denisea1000) { + // A1000 sprite ends 1 lores pixel later + sprites_hidden2 |= sprite_hidden_mask; + } else { + sprites_hidden2 |= sprite_hidden_mask; + sprites_hidden = sprites_hidden2; + } + if (cnt > diwlastword_total) { + diwlastword_total = cnt; } +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_HDIW, false); + } +#endif +} - int cx = (((lightpen_x[lpnum] + visible_left_border) >> lores_shift) >> 1) + 29; +static void do_denise_cck(int linecnt, int startpos, int i) +{ + int idxp = (i + startpos + 1) & (DENISE_RGA_SLOT_TOTAL - 1); + int idx0 = (i + startpos - 0) & (DENISE_RGA_SLOT_TOTAL - 1); + int idx1 = (i + startpos - 1) & (DENISE_RGA_SLOT_TOTAL - 1); + int idx2 = (i + startpos - 1) & (DENISE_RGA_SLOT_TOTAL - 1); + int idx3 = (i + startpos - 2) & (DENISE_RGA_SLOT_TOTAL - 1); - int cy = lightpen_y[lpnum]; - cy >>= linedbl; - cy += minfirstline; + denise_hcounter_new = denise_hcounter + 2; + denise_hcounter_new &= 511; - cx += currprefs.lightpen_offset[0]; - cy += currprefs.lightpen_offset[1]; + struct denise_rga *rd; - if (cx <= 0x18 - 1) { - cx = 0x18 - 1; - out = true; + rd = &rga_denise[idx1]; + if (rd->line == linecnt) { + expand_drga(rd); } - if (cy <= minfirstline - 1) { - cy = minfirstline - 1; - out = true; + + rd = &rga_denise[idx0]; + if (rd->line == linecnt) { + expand_drga_early(rd); } - if (cy >= maxvpos) { - cy = maxvpos; - out = true; + +#ifdef DEBUGGER + if (rd->dr) { + uae_u32 f0; + if (debug_dma_ptr->denise_evt[1] & DENISE_EVENT_COPIED) { + f0 = debug_dma_ptr->denise_evt[1]; + } else { + f0 = debug_dma_ptr->denise_evt[0]; + debug_dma_ptr->denise_evt[1] = f0; + debug_dma_ptr->denise_evt_changed[1] = 0; + } + f0 &= ~(DENISE_EVENT_COPIED | DENISE_EVENT_UNKNOWN); + debug_dma_ptr = rd->dr; + debug_dma_ptr->dhpos[0] = denise_hcounter; + debug_dma_ptr->denise_evt[0] = f0; + debug_dma_ptr->denise_evt_changed[0] = 0; + debug_dma_ptr->denise_evt[1] = 0; + debug_dma_ptr->denise_evt_changed[1] = 0; + debug_dma_dhpos_odd = &debug_dma_ptr->dhpos[1]; } +#endif - if (currprefs.lightpen_crosshair && lightpen_active) { - for (int i = 0; i < LIGHTPEN_HEIGHT; i++) { - int line = lightpen_y[lpnum] + i - LIGHTPEN_HEIGHT / 2; - if (line >= 0 && line < max_ypos_thisframe1) { - if (lightpen_active & (1 << lpnum)) { - draw_lightpen_cursor(vb->monitor_id, lightpen_x[lpnum], i, line, cx > 0, lpnum); - } - } - } + rd = &rga_denise[idxp]; + if (rd->line == linecnt) { + expand_drga_early2x(rd); } - lightpen_y1[lpnum] = lightpen_y[lpnum] - LIGHTPEN_HEIGHT / 2 - 1 + thisframe_y_adjust; - lightpen_y2[lpnum] = lightpen_y1[lpnum] + LIGHTPEN_HEIGHT + 1 + thisframe_y_adjust; + if (!aga_mode && ecs_denise) { + int idbe = (i + startpos - 3) & (DENISE_RGA_SLOT_TOTAL - 1); + rd = &rga_denise[idbe]; + if (rd->line == linecnt) { + expand_drga_blanken(rd); + } + } - lightpen_cx[lpnum] = out ? -1 : cx; - lightpen_cy[lpnum] = out ? -1 : cy; } -static void refresh_indicator_init(void) +static void burst_enable(void) { - xfree(refresh_indicator_buffer); - refresh_indicator_buffer = NULL; - xfree(refresh_indicator_changed); - refresh_indicator_changed = NULL; - xfree(refresh_indicator_changed_prev); - refresh_indicator_changed_prev = NULL; - - if (!currprefs.refresh_indicator) - return; - - refresh_indicator_height = 600; - refresh_indicator_buffer = xcalloc(uae_u8, MAX_PIXELS_PER_LINE * 2 * refresh_indicator_height); - refresh_indicator_changed = xcalloc(uae_u8, refresh_indicator_height); - refresh_indicator_changed_prev = xcalloc(uae_u8, refresh_indicator_height); + denise_burst = true; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_BURST, true); + } +#endif } - -static const int refresh_indicator_colors[] = { 0x777, 0x0f0, 0x00f, 0xff0, 0xf0f }; - -static void refresh_indicator_update(struct vidbuffer *vb) +static void burst_disable(void) { - struct vidbuf_description *vidinfo = &adisplays[vb->monitor_id].gfxvidinfo; - for (int i = 0; i < max_ypos_thisframe1; i++) { - int i1 = i + min_ypos_for_screen; - int line = i + thisframe_y_adjust_real; - int whereline = amiga2aspect_line_map[i1]; - int wherenext = amiga2aspect_line_map[i1 + 1]; + denise_burst = false; +#ifdef DEBUGGER + if (debug_dma) { + record_dma_event_denise(debug_dma_ptr, denise_cycle_half, DENISE_EVENT_BURST, false); + } +#endif +} - if (whereline >= vb->inheight) - break; - if (whereline < 0) - continue; - if (line >= refresh_indicator_height) - break; +static void lts_unaligned_ecs(int, int, int); +static void lts_unaligned_aga(int, int, int); - xlinebuffer = row_map[whereline]; - uae_u8 pixel = refresh_indicator_changed_prev[line]; - if (wherenext >= 0) { - pixel = refresh_indicator_changed_prev[line & ~1]; +static bool checkhorizontal1_ecs(int cnt, int cnt_next, int h) +{ + denise_cycle_half = h; + if (reswitch_unalign) { + lts_unaligned_ecs(cnt, cnt_next, h); +#if 0 + if (reswitch_unalign == 1) { + bplcon1_shift_mask &= 7; + bplcon1_shift[0] &= 7; + bplcon1_shift[1] &= 7; } - - int color1 = 0; - int color2 = 0; - if (pixel <= 4) { - color1 = color2 = refresh_indicator_colors[pixel]; - } else if (pixel <= 8) { - color2 = refresh_indicator_colors[pixel - 5]; +#endif + if (reswitch_unalign > 0) { + reswitch_unalign--; + } else { + reswitch_unalign++; } - for (int x = 0; x < 8; x++) { - putpixel(xlinebuffer, NULL, vidinfo->drawbuffer.pixbytes, x, xcolors[color1]); + if (reswitch_unalign == 0) { + update_bplcon1(); } - for (int x = 8; x < 16; x++) { - putpixel(xlinebuffer, NULL, vidinfo->drawbuffer.pixbytes, x, xcolors[color2]); + return true; + } +#if 0 + lts_unaligned_ecs(cnt, cnt_next, h); + return true; +#endif + if (cnt == denise_hstrt_lores) { + do_hstrt_ecs(cnt); + } + if (cnt == denise_hstop_lores) { + do_hstop_ecs(cnt); + } + if (cnt_next == denise_hbstrt_lores) { + do_hbstrt(cnt); + } + if (cnt_next == denise_hbstop_lores) { + do_hbstop(cnt); + } + if (!exthblankon_ecs && cnt_next == denise_strlong_lores) { + copy_strlong(); + } + if (cnt == 0x40) { // BURST signal activation + burst_enable(); + } + if (cnt == 0x52) { // BURST signal deactivation + burst_disable(); + } + if (exthblankon_ecsonly) { + do_exthblankon_ecs(); + if (!denise_csync_blanken2 && denise_csync_blanken && !denise_vblank_active) { + // When ECS Denise CSYNC programmed blank activates: clear bpl1dat border state and sprite visible state + hstart_new(); } } + if (bpl1dat_unalign && h) { + bpl1dat_enable_bpls(); + bpl1dat_unalign = false; + } + // Delay by 1 lores pixel + denise_csync_blanken2 = denise_csync_blanken; + return false; } -#define LARGEST_LINE_DEBUG 0 - -static void draw_frame2(struct vidbuffer *vbin, struct vidbuffer *vbout) +static bool checkhorizontal1_aga(int cnt, int cnt_next, int h) { -#if LARGEST_LINE_DEBUG - int largest = 0; + denise_cycle_half = h; +#if 0 + lts_unaligned_aga(cnt, cnt_next, h); + return true; #endif + if (aga_unalign0 > 0 && !h) { + aga_unalign0--; + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + if (aga_unalign1 > 0 && h) { + aga_unalign1--; + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + if (borderblank) { + if (cnt == denise_brdstrt_lores) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + if (cnt == denise_brdstop_lores) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + } + if (cnt == denise_hstrt_lores) { + if (denise_hstrt_unalign) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + do_hstrt_aga(cnt); + } + if (cnt == denise_hstop_lores) { + if (denise_hstop_unalign) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + do_hstop_aga(cnt); + } + if (cnt_next == denise_hbstrt_lores) { + do_hbstrt(cnt); + } + if (cnt_next == denise_hbstop_lores) { + do_hbstop(cnt); + } + if (cnt_next == denise_phbstrt_lores) { + if (denise_phbstrt_unalign) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + do_phbstrt_aga(cnt_next); + } + if (cnt_next == denise_phbstop_lores) { + if (denise_phbstop_unalign) { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + do_phbstop_aga(cnt_next); + } + if (!exthblankon_aga && cnt_next == denise_strlong_lores) { + if (!denise_strlong_unalign) { + copy_strlong(); + } else { + lts_unaligned_aga(cnt, cnt_next, h); + return true; + } + } + return false; +} - set_vblanking_limits(); - reset_hblanking_limits(); - set_hblanking_limits(); - extblankcheck(); - expand_vb_state(); +#define SPRITE_NEAREST_MIN -3 - bool firstline = true; - int lastline = thisframe_y_adjust_real - (1 << linedbl); - for (int i = 0; i < max_ypos_thisframe1; i++) { - int i1 = i + min_ypos_for_screen; - int line = i + thisframe_y_adjust_real; - int whereline = amiga2aspect_line_map[i1]; - int wherenext = amiga2aspect_line_map[i1 + 1]; +static void matchsprites2(int cnt) +{ + int sidx = 0; + while (dprspt[sidx]) { + struct denise_spr *sp = dprspt[sidx]; + if (sp->armed) { + if (cnt == (sp->xpos & ~3)) { + if (sp->shiftercopydone) { + sp->shiftercopydone = false; + } else { + sp->dataas = sp->dataa; + sp->databs = sp->datab; - if (whereline >= vbin->inheight) - break; - if (whereline < 0) { - lastline = line; - continue; - } + // ECS Denise + hires sprite bit and not superhires: leftmost pixel is missing + if (ecs_denise_only && denise_res < RES_SUPERHIRES && (sp->ctl & 0x10)) { + sp->dataas &= 0x7fffffff; + sp->databs &= 0x7fffffff; + } - if (firstline) { - if (lastline >= 0) { - // scan line - 1 events, it might have hblank enable for next line. - for (int j = 0; j < 2; j++) { - dip_for_drawing = curr_drawinfo + lastline; - dp_for_drawing = line_decisions + lastline; - do_color_changes(NULL, NULL, -1); - lastline++; + if (sp->dataas || sp->databs) { + spr_arms(sp, 1); + sp->fmode = denise_sprfmode; + } } } - firstline = false; } + sidx++; + } +} -#if LARGEST_LINE_DEBUG - if (largest < whereline) - largest = whereline; -#endif - - if (ecs_denise) { - reset_hblanking_limits(); - set_hblanking_limits(); +static void matchsprites2_ecs_shres(int cnt) +{ + int sidx = 0; + while (dprspt[sidx]) { + struct denise_spr *sp = dprspt[sidx]; + if (sp->armed) { + if (cnt == sp->xpos) { + if (sp->shiftercopydone) { + sp->shiftercopydone = false; + } else { + sp->dataas = sp->dataa; + sp->databs = sp->datab; + if (sp->dataas || sp->databs) { + spr_arms(sp, 1); + sp->fmode = denise_sprfmode; + } + } + } } - - hposblank = 0; - pfield_draw_line(vbout, line, whereline, wherenext); + sidx++; + } +} +static void matchsprites_ecs_shres(int cnt) +{ + denise_spr_nearestcnt--; + if (denise_spr_nearestcnt < 0 && denise_spr_nearestcnt >= SPRITE_NEAREST_MIN) { + matchsprites2_ecs_shres(cnt); + spr_nearest(); } - -#if LARGEST_LINE_DEBUG - write_log (_T("%d\n"), largest); -#endif } -static void draw_frame_extras(struct vidbuffer *vb, int y_start, int y_end) +static void matchsprites(int cnt) { - if (debug_dma > 1 || debug_heatmap > 1) { - for (int i = 0; i < vb->outheight; i++) { - int line = i; - draw_debug_status_line(vb->monitor_id, line); - } + denise_spr_nearestcnt--; + if (denise_spr_nearestcnt < 0 && denise_spr_nearestcnt >= SPRITE_NEAREST_MIN) { + matchsprites2(cnt); + spr_nearest(); } +} - if (lightpen_active) { - if (lightpen_active & 1) { - lightpen_update(vb, 0); - } - if (inputdevice_get_lightpen_id() >= 0 && (lightpen_active & 2)) { - lightpen_update(vb, 1); +static void matchsprites_aga(int cnt) +{ + denise_spr_nearestcnt--; + if (denise_spr_nearestcnt < 0 && denise_spr_nearestcnt >= SPRITE_NEAREST_MIN) { + int sidx = 0; + while (dprspt[sidx]) { + struct denise_spr *sp = dprspt[sidx]; + if (sp->armed) { + if ((cnt & denise_xposmask) == (sp->xpos & denise_xposmask)) { + if (sp->shiftercopydone) { + sp->shiftercopydone = false; + } else { + if (denise_sprfmode64) { + sp->dataas64 = sp->dataa64; + sp->databs64 = sp->datab64; + if (sp->dataas64 || sp->databs64) { + spr_arms(sp, 1); + sp->fmode = denise_sprfmode; + } + } else { + sp->dataas = sp->dataa; + sp->databs = sp->datab; + if (sp->dataas || sp->databs) { + spr_arms(sp, 1); + sp->fmode = denise_sprfmode; + } + } + } + } + } + sidx++; } + spr_nearest(); } - if (refresh_indicator_buffer) - refresh_indicator_update(vb); } -extern bool beamracer_debug; +bool start_draw_denise(void) +{ + struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; + struct vidbuffer *vb = &vidinfo->drawbuffer; + + vidinfo->outbuffer = vb; + if (!lockscr(vb, false, false, display_reset > 0)) { + return false; + } + + denise_y_start = 0; + denise_y_end = -1; + + return true; +} -void draw_lines(int end, int section) +void end_draw_denise(void) { - int monid = 0; - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; + struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; struct vidbuffer *vb = &vidinfo->drawbuffer; - int y_start = -1; - int y_end = -1; - static bool section_toggle; + unlockscr(vb, denise_y_start, denise_y_end); +} - if (section == 0) - section_toggle = !section_toggle; +// emulate black level calibration (vb and hb) +static uae_u8 blc_prev[3]; +static void emulate_black_level_calibration(uae_u32 *b1, uae_u32 *b2, uae_u32 *db, int dtotal, int cstart, int clen) +{ + int shift = currprefs.gfx_resolution + 1; + int off; - end -= minfirstline; - if (end < 0) - return; - end <<= linedbl; - if (min_ypos_for_screen > 0 && thisframe_y_adjust_real > 0) { - end += min_ypos_for_screen; - end -= thisframe_y_adjust_real; - if (end < 0) - return; + if (cstart < 0) { + off = dtotal + cstart; + } else { + off = cstart; } + uae_u32 vv[3] = { 0 }; + int cnt = 0; + for (int i = 0; i < clen; i++) { + for (int ii = 0; ii < (1 << shift); ii++) { + int j = (off << shift) + (i << shift) + ii; + uae_u32 v = db[j]; + uae_u8 vi; + vi = (v >> 16) & 0xff; + vv[0] += vi; + vi = (v >> 8) & 0xff; + vv[1] += vi; + vi = (v >> 0) & 0xff; + vv[2] += vi; + cnt++; + } + } + db[off << shift] = 0xff0000; + db[(off << shift) + (clen << shift) - 1] = 0xff0000; - int section_color_cnt = 4; - - vidinfo->outbuffer = vb; - if (!lockscr(vb, false, vb->last_drawn_line ? false : true, display_reset > 0)) - return; - - set_vblanking_limits(); - reset_hblanking_limits(); - set_hblanking_limits(); + int outc[3]; + for (int i = 0; i < 3; i++) { + outc[i] = vv[i] / cnt; + } - bool firstline = true; - int lastline = thisframe_y_adjust_real - (1 << linedbl); - while (vb->last_drawn_line < end) { - int i = vb->last_drawn_line; - int i1 = i + min_ypos_for_screen; - int line = i + thisframe_y_adjust_real; - int whereline = amiga2aspect_line_map[i1]; - int wherenext = amiga2aspect_line_map[i1 + 1]; +// if (outc[0] > 10 || outc[1] > 10 || outc[2] > 10) +// write_log("%02x %02x %02x\n", outc[0], outc[1], outc[2]); - if (whereline >= vb->inheight) { - y_end = vb->inheight - 1; - break; + if (outc[0] <= 3 && outc[1] <= 3 && outc[2] <= 3) { + memcpy(b1, db, (dtotal * sizeof(uae_u32)) << shift); + if (b1 != b2) { + memcpy(b2, db, (dtotal * sizeof(uae_u32)) << shift); } - if (whereline < 0) { - lastline = line; - continue; - } - if (y_start < 0) { - y_start = whereline; - } - - if (firstline) { - if (lastline >= 0) { - // scan line - 1 events, it might have hblank enable for next line. - for (int j = 0; j < 2; j++) { - dip_for_drawing = curr_drawinfo + lastline; - do_color_changes(NULL, NULL, -1); - lastline++; + } else { + for (int i = 0; i < (dtotal << shift); i++) { + uae_u32 v = *db++; + if (i >= (clen << shift)) { + uae_u8 c[3]; + c[0] = v >> 16; + c[1] = v >> 8; + c[2] = v >> 0; + for (int j = 0; j < 3; j++) { + if (outc[j] > 0) { + if (c[j] <= outc[j]) { + c[j] = 0; + } else { + c[j] = (c[j] - outc[j]) * 256 / outc[j]; + } + } } + v = (c[0] << 16) | (c[1] << 8) | (c[2] << 0); } - firstline = false; + *b1++ = v; + *b2++ = v; } + } +} - hposblank = 0; - pfield_draw_line(vb, line, whereline, wherenext); - -#if 1 - if (beamracer_debug) { - if (vb->last_drawn_line == end - 4) { - section_color_cnt = 4; +// ultra extreme debug pixel patterns +static uint32_t decode_denise_specials_debug(uint32_t v, int inc) +{ + *buf_d++ = v; + if (decode_specials_debug > 1) { + int t = ((inc >> 1) + linear_vpos + 1) & 3; + if (denise_blank_active2) { + if (t == 0) { + v = 0; + } else if (t == 2) { + v = xcolors[0x111]; } - if (section_color_cnt > 0) { - section_color_cnt--; - static const int section_colors[] = { 0x777, 0xf00, 0x0f0, 0x00f }; - int color = section_toggle ? section_colors[section & 3] : 0; - xlinebuffer = row_map[whereline]; - for (int x = 0; x < 4; x++) { - putpixel(xlinebuffer, NULL, vidinfo->drawbuffer.pixbytes, x, xcolors[color]); - } + } + if (v & 0x01000000) { + if (t == 0) { + v = xcolors[0x686]; } } -#endif - - vb->last_drawn_line++; - if (vb->last_drawn_line == end) { - y_end = whereline; + if (debug_special_csync) { + if (new_beamcon0 & BEAMCON0_BLANKEN) { + if (denise_csync_blanken) { + v = xcolors[0x381]; + } else if (denise_csync) { + v = xcolors[0x831]; + } + } else if (denise_csync) { + v = xcolors[0x831]; + } + } else if (debug_special_hvsync) { + uae_u16 c = 0; + if (denise_hsync) { + c |= 0x831; + } + if (denise_vsync) { + c |= 0x381; + } + if (c) { + v = xcolors[c]; + } } } - draw_frame_extras(vb, y_start, y_end + 1); - unlockscr(vb, y_start, y_end + 1); + return v; } -bool draw_frame (struct vidbuffer *vb) +static void flush_null(void) { - struct vidbuf_description *vidinfo = &adisplays[vb->monitor_id].gfxvidinfo; - uae_u8 oldstate[LINESTATE_SIZE]; - struct vidbuffer oldvb; - - memcpy (&oldvb, &vidinfo->drawbuffer, sizeof (struct vidbuffer)); - memcpy (&vidinfo->drawbuffer, vb, sizeof (struct vidbuffer)); - clearbuffer (vb); - init_row_map (); - memcpy (oldstate, linestate, LINESTATE_SIZE); - for (int i = 0; i < LINESTATE_SIZE; i++) { - uae_u8 v = linestate[i]; - if (v == LINE_REMEMBERED_AS_PREVIOUS) { - if (i > 0) - linestate[i - 1] = LINE_DECIDED_DOUBLE; - v = LINE_AS_PREVIOUS; - } else if (v == LINE_DONE_AS_PREVIOUS) { - if (i > 0) - linestate[i - 1] = LINE_DECIDED_DOUBLE; - v = LINE_AS_PREVIOUS; - } else if (v == LINE_REMEMBERED_AS_BLACK) { - v = LINE_BLACK; - } else if (v == LINE_DONE) { - v = LINE_DECIDED; - } -// if (i < maxvpos) -// write_log (_T("%d: %d -> %d\n"), i, linestate[i], v); - linestate[i] = v; + if (aga_mode) { + if (aga_delayed_color_idx >= 0) { + update_color(aga_delayed_color_idx, aga_delayed_color_val, aga_delayed_color_con2, aga_delayed_color_con3); + aga_delayed_color_idx = -1; + } + sbasecol[0] = sbasecol2[0]; + sbasecol[1] = sbasecol2[1]; + bplcon4_denise_xor_val = bplcon4_denise_xor_val2; } - last_drawn_line = 0; - first_drawn_line = 32767; - drawing_color_matches = -1; - draw_frame2 (vb, NULL); - last_drawn_line = 0; - first_drawn_line = 32767; - drawing_color_matches = -1; - memcpy (linestate, oldstate, LINESTATE_SIZE); - memcpy (&vidinfo->drawbuffer, &oldvb, sizeof (struct vidbuffer)); - init_row_map (); - return true; -} -static void setnativeposition(struct vidbuffer *vb) -{ - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - vb->inwidth = vidinfo->drawbuffer.inwidth; - vb->inheight = vidinfo->drawbuffer.inheight; - vb->inwidth2 = vidinfo->drawbuffer.inwidth2; - vb->inheight2 = vidinfo->drawbuffer.inheight2; - vb->outwidth = vidinfo->drawbuffer.outwidth; - vb->outheight = vidinfo->drawbuffer.outheight; + bplmode = bplmode_new; } -static void setspecialmonitorpos(struct vidbuffer *vb) +static void lts_null(void) { - struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; - vb->extrawidth = vidinfo->drawbuffer.extrawidth; - vb->xoffset = vidinfo->drawbuffer.xoffset; - vb->yoffset = vidinfo->drawbuffer.yoffset; - vb->inxoffset = vidinfo->drawbuffer.inxoffset; - vb->inyoffset = vidinfo->drawbuffer.inyoffset; + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + denise_cycle_half = h; + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + + if (aga_mode) { + checkhorizontal1_aga(denise_hcounter, denise_hcounter_prev, h); + } else { + int cnt = denise_hcounter << 2; + checkhorizontal1_ecs(cnt, denise_hcounter_next, h); + } + flush_null(); + +#ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; +#endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } } -static void finish_drawing_frame(bool drawlines) +static void get_line(int gfx_ypos, enum nln_how how) { - int monid = 0; - struct amigadisplay *ad = &adisplays[monid]; - struct vidbuf_description *vidinfo = &ad->gfxvidinfo; + struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; struct vidbuffer *vb = &vidinfo->drawbuffer; + static int prevline; - vidinfo->outbuffer = vb; - vb->last_drawn_line = 0; - - if (!drawlines) { - return; - } + xlinebuffer = NULL; + xlinebuffer2 = NULL; - if (!lockscr(vb, false, true, display_reset > 0)) { - notice_screen_contents_lost(monid); - return; + if (currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA) { + gfx_ypos -= minfirstline_linear << currprefs.gfx_vresolution; } - draw_frame2(vb, vb); - - draw_frame_extras(vb, -1, -1); - - // video port adapters - if (currprefs.monitoremu) { - struct vidbuf_description *outvi = &adisplays[currprefs.monitoremu_mon].gfxvidinfo; - struct vidbuffer *out = &outvi->drawbuffer; - if (init_genlock_data != specialmonitor_need_genlock()) { - init_genlock_data = specialmonitor_need_genlock(); - init_row_map(); + // clear lines if mode height is now smaller than previously + if (gfx_ypos >= 0 && gfx_ypos < prevline) { + struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo; + struct vidbuffer *vb = &vidinfo->drawbuffer; + if (prevline > vb->inheight) { + prevline = vb->inheight; } - bool locked = true; - bool multimon = currprefs.monitoremu_mon != 0; - if (multimon) { - locked = lockscr(out, false, true, display_reset > 0); - outvi->xchange = vidinfo->xchange; - outvi->ychange = vidinfo->ychange; - } else { - out = &vidinfo->tempbuffer; + int l = prevline; + while (l < drawing_blank_end && l < vb->inheight) { + uae_u8 *b = row_map[l]; + memset(b, 0, vb->inwidth * vb->pixbytes); + l++; } - setspecialmonitorpos(out); - if (locked && emulate_specialmonitors(vb, out)) { - if (!multimon) { - vb->tempbufferinuse = true; - vb = vidinfo->outbuffer = out; + l = gfx_ypos - 1; + if (l < 0) { + l = 0; + } + while (l > drawing_blank_start) { + if (l < vb->inheight) { + uae_u8 *b = row_map[l]; + memset(b, 0, vb->inwidth * vb->pixbytes); } - if (out->nativepositioning) { - setnativeposition(out); + l--; + } + drawing_blank_start = gfx_ypos < 0 ? 0 : gfx_ypos; + drawing_blank_end = prevline; + } + prevline = gfx_ypos >= 0 ? gfx_ypos : 0; + + if (gfx_ypos >= 0 && gfx_ypos < vb->inheight) { + denise_y_end = gfx_ypos + 1; + xlinebuffer = row_map[gfx_ypos]; + xlinebuffer -= linetoscr_x_adjust_pixbytes; + switch (how) + { + case nln_lower_black_always: + if (gfx_ypos + 1 < vb->inheight) { + uae_u8 *buf = row_map[gfx_ypos + 1]; + buf -= linetoscr_x_adjust_pixbytes; + memset(buf, 0, vb->inwidth * vb->pixbytes); } - if (!ad->specialmonitoron) { - need_genlock_data = specialmonitor_need_genlock(); - ad->specialmonitoron = true; - compute_framesync(); - pfield_set_linetoscr(); + break; + case nln_upper_black_always: + if (gfx_ypos > 0) { + uae_u8 *buf = row_map[gfx_ypos - 1]; + buf -= linetoscr_x_adjust_pixbytes; + memset(buf, 0, vb->inwidth * vb->pixbytes); } - } else { - pfield_set_linetoscr(); - need_genlock_data = false; - if (ad->specialmonitoron || out->tempbufferinuse) { - out->tempbufferinuse = false; - ad->specialmonitoron = false; - compute_framesync(); + break; + case nln_doubled: + if (gfx_ypos + 1 < vb->inheight) { + xlinebuffer2 = row_map[gfx_ypos + 1]; + xlinebuffer2 -= linetoscr_x_adjust_pixbytes; + denise_y_end++; } + break; } - if (multimon && locked) { - unlockscr(out, -1, -1); - render_screen(out->monitor_id, 1, true); - show_screen(out->monitor_id, 0); + xlinebuffer_genlock = row_map_genlock[gfx_ypos] - linetoscr_x_adjust_pixels; + } + + buf1 = (uae_u32*)xlinebuffer; + if (!xlinebuffer2) { + xlinebuffer2 = xlinebuffer; + } + buf2 = (uae_u32*)xlinebuffer2; + buf_d = debug_bufx; + gbuf = xlinebuffer_genlock; + + if (buf1) { + for (int i = 0; i < denise_lol_shift_prev; i++) { + *buf1++ = 0; + *buf2++ = 0; + *buf_d++ = 0; + if (gbuf) { + *gbuf++ = 0xffff; + } } } - // genlock - if (currprefs.genlock_image && (currprefs.genlock || currprefs.genlock_effects) && !currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated) { - setspecialmonitorpos(&vidinfo->tempbuffer); - if (init_genlock_data != specialmonitor_need_genlock()) { - need_genlock_data = init_genlock_data = specialmonitor_need_genlock(); - init_row_map(); - pfield_set_linetoscr(); + if (!buf1) { + denise_pixtotal = -1; + } else { + if ((denise_pixtotal << (1 + currprefs.gfx_resolution)) > vb->inwidth) { + denise_pixtotal = vb->inwidth >> (1 + currprefs.gfx_resolution); } - emulate_genlock(vb, &vidinfo->tempbuffer, aga_genlock_features_zdclken); - vb = vidinfo->outbuffer = &vidinfo->tempbuffer; - if (vb->nativepositioning) - setnativeposition(vb); - vidinfo->drawbuffer.tempbufferinuse = true; } -#ifdef CD32 - // cd32 fmv - if (!currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated && currprefs.cs_cd32fmv) { - if (cd32_fmv_active) { - cd32_fmv_genlock(vb, &vidinfo->tempbuffer); - vb = vidinfo->outbuffer = &vidinfo->tempbuffer; - setnativeposition(vb); - vidinfo->drawbuffer.tempbufferinuse = true; - } else { - vidinfo->drawbuffer.tempbufferinuse = false; +} + +void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int startpos, int total, int dtotal, int calib_start, int calib_len) +{ + bool fullline = false; // currprefs.chipset_hr; + + denise_hcounter_prev = -1; + denise_pixtotal = dtotal; + denise_linecnt = linecnt; + denise_startpos = startpos; + denise_total = total; + denise_cck = 0; + if (denise_max_planes != denise_planes) { + int mp = denise_max_planes; + denise_max_planes = denise_planes; + if (mp > 4 && denise_bplfmode == 0 && denise_res > 0) { + select_lts(); + } + if (mp > 2 && denise_bplfmode == 0 && denise_res > 1) { + select_lts(); } } -#endif + denise_max_odd_even = denise_odd_even; - // grayscale - if (!currprefs.monitoremu && vidinfo->tempbuffer.bufmem_allocated && - ((!currprefs.genlock && (!bplcolorburst_field && currprefs.cs_color_burst)) || currprefs.gfx_grayscale)) { - setspecialmonitorpos(&vidinfo->tempbuffer); - emulate_grayscale(vb, &vidinfo->tempbuffer); - vb = vidinfo->outbuffer = &vidinfo->tempbuffer; - if (vb->nativepositioning) - setnativeposition(vb); - vidinfo->drawbuffer.tempbufferinuse = true; + if (fullline) { + denise_pixtotal = denise_total; + buf1 = debug_buf; + buf2 = debug_buf; } - unlockscr(vb, display_reset ? -2 : -1, -1); + get_line(gfx_ypos, how); + + if (dtotal < 0 && currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA) { + + // don't draw vertical blanking if not ultra extreme overscan + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (aga_mode) { + for (int h = 0; h < 2 ;h++) { + denise_cycle_half = h; + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + checkhorizontal1_aga(denise_hcounter << 2, denise_hcounter_next << 2, h); + flush_null(); +#ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; +#endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + } else { + for (int h = 0; h < 2 ;h++) { + denise_cycle_half = h; + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + flush_null(); +#ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; +#endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + } + denise_hcounter = denise_hcounter_new; + denise_cck++; + } + + } else { + + // visible line + if (denise_spr_nr_armed) { + spr_nearest(); + } + + uae_u32 *buf1t = buf1; + uae_u32 *buf2t = buf2; + uae_u32 *bufdt = buf_d; + + while (denise_cck < denise_total) { + lts(); + lts_changed = false; + } + + if (currprefs.display_calibration && xlinebuffer) { + emulate_black_level_calibration(buf1t, buf2t, bufdt, total, calib_start, calib_len); + } + } + resolution_count[denise_res]++; + lines_count++; } -void check_prefs_picasso(void) +// optimized drawing routines +#include "linetoscr_common.cpp" +#include "linetoscr_ocs_ecs.cpp" +#include "linetoscr_ocs_ecs_genlock.cpp" +#include "linetoscr_ocs_ecs_ntsc.cpp" +#include "linetoscr_ocs_ecs_ntsc_genlock.cpp" +#include "linetoscr_aga_fm0.cpp" +#include "linetoscr_aga_fm1.cpp" +#include "linetoscr_aga_fm2.cpp" +#include "linetoscr_aga_fm0_genlock.cpp" +#include "linetoscr_aga_fm1_genlock.cpp" +#include "linetoscr_aga_fm2_genlock.cpp" +#include "linetoscr_ecs_shres.cpp" + +// select linetoscr routine +static void select_lts(void) { -#ifdef PICASSO96 - for (int monid = 0; monid < MAX_AMIGAMONITORS; monid++) { - struct amigadisplay *ad = &adisplays[monid]; + LINETOSRC_FUNC lts_old = lts; - if (ad->picasso_on && ad->picasso_redraw_necessary) - picasso_refresh(monid); - ad->picasso_redraw_necessary = 0; + bool samecycle = denise_hcounter == denise_hcounter_prev; + // if plane count decreases mid-scanline, old data in higher plane count shifters must be still shifted out. + if (denise_planes > denise_max_planes) { + denise_max_planes = denise_planes; + } + if (denise_bplfmode == 0 && denise_res > 0 && denise_max_planes > 4) { + denise_max_planes = 4; + } + if (denise_bplfmode == 0 && denise_res > 1 && denise_max_planes > 2) { + denise_max_planes = 2; + } + if (denise_bplfmode == 1 && denise_res > 1 && denise_max_planes > 4) { + denise_max_planes = 4; + } + if (denise_max_planes > 6 && (bplmode_new == CMODE_EXTRAHB || bplmode_new == CMODE_EXTRAHB_ECS_KILLEHB)) { + denise_max_planes = 6; + } + if (denise_max_planes == 7 && bplmode_new == CMODE_HAM) { + denise_max_planes = 6; + } + denise_odd_even = bplcon1_shift[0] != bplcon1_shift[1]; + if (denise_odd_even) { + denise_max_odd_even = denise_odd_even; + } + if (!denise_odd_even) { + bplshiftcnt[1] = bplshiftcnt[0]; + } + hresolution = currprefs.gfx_resolution; + if (doublescan == 1) { + hresolution++; + if (hresolution > RES_SUPERHIRES) { + hresolution = RES_SUPERHIRES; + } + } + hresolution_add = 1 << hresolution; - if (ad->picasso_requested_on == ad->picasso_on && !ad->picasso_requested_forced_on) - continue; - - devices_unsafeperiod(); + if (aga_mode) { - if (!ad->picasso_requested_on && monid > 0) { - ad->picasso_requested_on = ad->picasso_on; - ad->picasso_requested_forced_on = false; - continue; + int spr = 0; + if (denise_spr_nr_armed || samecycle) { + spr = 1; + } + if (need_genlock_data) { + int planes = denise_max_planes > 4 ? 1 : 0; + int oddeven = denise_max_odd_even ? 1 : 0; + int idx = (oddeven) + (bplmode_new * 2) + (planes * 2 * 5) + (spr * 2 * 5 * 2) + (denise_res * 2 * 5 * 2 * 2) + (hresolution * 2 * 5 * 2 * 2 * 3) + (bpldat_fmode * 2 * 5 * 2 * 2 * 3 * 3); + lts = linetoscr_aga_genlock_funcs[idx]; + } else { + int planes = denise_max_planes > 0 ? (denise_max_planes - 1) / 2 : 0; + int oddeven = denise_max_odd_even ? 1 : 0; + int idx = (oddeven) + (bplmode_new * 2) + (planes * 2 * 5) + (spr * 2 * 5 * 4) + (denise_res * 2 * 5 * 4 * 2) + (hresolution * 2 * 5 * 4 * 2 * 3) + (bpldat_fmode * 2 * 5 * 4 * 2 * 3 * 3); + lts = linetoscr_aga_funcs[idx]; } - if (ad->picasso_requested_on) { - if (!toggle_rtg(monid, -2)) { - ad->picasso_requested_forced_on = false; - ad->picasso_on = false; - ad->picasso_requested_on = false; - continue; - } + } else if (ecs_denise && denise_res == RES_SUPERHIRES) { + + int idx = hresolution; + if (need_genlock_data) { + lts = linetoscr_ecs_shres_genlock_funcs[idx]; + } else { + lts = linetoscr_ecs_shres_funcs[idx]; } - ad->picasso_requested_forced_on = false; - ad->picasso_on = ad->picasso_requested_on; + } else { - if (!ad->picasso_on) { - clear_inhibit_frame(monid, IHF_PICASSO); - ad->gf_index = ad->interlace_on ? GF_INTERLACE : GF_NORMAL; + int spr = 0; + if (denise_spr_nr_armed || samecycle) { + spr = 1; + } + if (need_genlock_data) { + int oddeven = denise_max_odd_even; + int idx = (oddeven) + (bplmode_new * 2) + (spr * 2 * 4) + (denise_res * 2 * 4 * 2) + (hresolution * 2 * 4 * 2 * 2); + lts = strlong_emulation ? linetoscr_ecs_ntsc_genlock_funcs[idx] : linetoscr_ecs_genlock_funcs[idx]; } else { - set_inhibit_frame(monid, IHF_PICASSO); - ad->gf_index = GF_RTG; + int planes; + switch (denise_max_planes) + { + case 0: + case 1: + case 2: + planes = 0; + break; + case 3: + case 4: + planes = 1; + break; + case 5: + planes = 2; + break; + default: + if (bplehb_eke) { + planes = 2; + } else { + planes = 3; + } + break; + } + int oddeven = denise_max_odd_even; + int idx = (oddeven) + (bplmode_new * 2) + (planes * 2 * 4) + (spr * 2 * 4 * 4) + (denise_res * 2 * 4 * 4 * 2) + (hresolution * 2 * 4 * 4 * 2 * 2); + lts = strlong_emulation ? linetoscr_ecs_ntsc_funcs[idx] : linetoscr_ecs_funcs[idx]; } - gfx_set_picasso_state(monid, ad->picasso_on); - picasso_enablescreen(monid, ad->picasso_requested_on); + } - notice_screen_contents_lost(monid); - notice_new_xcolors(); - count_frame(monid); - compute_framesync(); + if (lts_old != lts) { + lts_changed = true; } -#endif + lts_request = false; + denise_hcounter_prev = denise_hcounter; } -void redraw_frame(void) +STATIC_INLINE uae_u8 getbpl(void) { - last_drawn_line = 0; - first_drawn_line = 32767; - // do not do full refresh if lagless mode - // because last line would appear as bright line - if (isvsync_chipset() < 0) - return; - finish_drawing_frame(true); + uae_u8 pix; + if (denise_bplfmode == 2) { + pix = getbpl8_64(); + } else if (denise_bplfmode == 1) { + pix = getbpl8_32(); + } else { + pix = getbpl8(); + } + return pix; } -void full_redraw_all(void) +// Generic and unoptimized shres based (outputs 4xshres,2xhires or 1xlores pixels) display emulation, +// only used when subpixel support is needed +// (lores pixel has hires or shres color change or hires pixel has shres color change) +// For example: +// HDIW or HB is not lores-aligned +// or BPLCON4 changes or AGA color register is modified. +static void lts_unaligned_aga(int cnt, int cnt_next, int h) { - int monid = 0; - bool redraw = false; - struct amigadisplay *ad = &adisplays[monid]; - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - if (vidinfo->drawbuffer.height_allocated && amiga2aspect_line_map) { - notice_screen_contents_lost(monid); - if (!ad->picasso_on) { - redraw_frame(); - redraw = true; - } + if (!denise_odd_even) { + bplshiftcnt[1] = bplshiftcnt[0]; } - if (ad->picasso_on) { - gfxboard_refresh(monid); - redraw = true; + + // hardwired hblank + if (cnt_next == denise_hbstrt_lores) { + do_hbstrt(cnt); } - if (redraw) { - render_screen(0, 1, true); - show_screen(0, 0); + if (cnt_next == denise_hbstop_lores) { + do_hbstop(cnt); } -} -bool vsync_handle_check (void) -{ - int monid = 0; - struct amigadisplay *ad = &adisplays[monid]; - int changed = check_prefs_changed_gfx (); - if (changed > 0) { - reset_drawing (); - init_row_map (); - init_aspect_maps (); - notice_screen_contents_lost(monid); - notice_new_xcolors (); - } else if (changed < 0) { - reset_drawing (); - init_row_map (); - init_aspect_maps (); - notice_screen_contents_lost(monid); - notice_new_xcolors (); - } - if (config_changed) { - device_check_config(); + cnt <<= 2; + cnt_next <<= 2; + + int dpixcnt = 0; + + int xshift = RES_SUPERHIRES - currprefs.gfx_resolution; + int xadd = 1 << xshift; + int denise_res_size2 = denise_res_size << xshift; + if (denise_res > currprefs.gfx_resolution) { + xshift = RES_SUPERHIRES - denise_res; + xadd = 1 << xshift; + denise_res_size2 = denise_res_size; } - return changed != 0; -} + int ipix = 0; + for (int i = 0; i < (1 << RES_SUPERHIRES); i += xadd, ipix += xadd) { -void vsync_handle_redraw(int long_field, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p, bool drawlines, bool initial) -{ - int monid = 0; - struct amigadisplay *ad = &adisplays[monid]; - last_redraw_point++; - if (lof_changed || interlace_seen <= 0 || (currprefs.gfx_iscanlines && interlace_seen > 0) || last_redraw_point >= 2 || long_field || doublescan < 0) { - last_redraw_point = 0; + if (i == 2 || !currprefs.gfx_resolution) { - if (!initial) { - if (ad->framecnt == 0) { - finish_drawing_frame(drawlines); -#ifdef AVIOUTPUT - if (!ad->picasso_on) { - frame_drawn(monid); + if (!h) { + if (aga_delayed_color_idx >= 0) { + update_color(aga_delayed_color_idx, aga_delayed_color_val, aga_delayed_color_con2, aga_delayed_color_con3); + aga_delayed_color_idx = -1; } -#endif + bplmode = bplmode_new; + } - count_frame(monid); + if (h) { + sbasecol[0] = sbasecol2[0]; + sbasecol[1] = sbasecol2[1]; + + if (bpl1dat_unalign) { + bpl1dat_enable_bpls_aga(); + bpl1dat_unalign = false; + } + + } + + } else if (i == 0) { + + if (h) { + bplcon4_denise_xor_val = bplcon4_denise_xor_val2; + } + } -#if 0 - if (interlace_seen > 0) { - interlace_seen = -1; + + if (cnt == denise_hstrt) { + do_hstrt_aga(cnt); } - else if (interlace_seen == -1) { - interlace_seen = 0; - if (currprefs.gfx_scandoubler && currprefs.gfx_vresolution) - notice_screen_contents_lost(); + if (cnt == denise_hstop) { + do_hstop_aga(cnt); } -#endif + if (cnt_next == denise_phbstrt) { + do_phbstrt_aga(cnt); + } + if (cnt_next == denise_phbstop) { + do_phbstop_aga(cnt); + } + if (!exthblankon_aga && cnt_next == denise_strlong_hd) { + copy_strlong(); + } + + matchsprites_aga(cnt); - if (quit_program < 0) { -#ifdef SAVESTATE - if (!savestate_state && quit_program == -UAE_QUIT && currprefs.quitstatefile[0]) { - savestate_initsave(currprefs.quitstatefile, 1, 1, true); - save_state(currprefs.quitstatefile, _T("")); + // bitplanes + uae_u8 pix = 0; + uae_u32 dpix_val = 0; + uae_u16 gpix = 0xffff; + if (!denise_blank_active) { + // borderblank ends 1 shres pixel early + dpix_val = cnt == denise_brdstop ? denise_colors.acolors[0] : bordercolor; + gpix = 0; + if (denise_hdiw && bpl1dat_trigger) { + pix = loaded_pixs[ipix]; + // odd to even bitplane collision + clxdat |= bplcoltable[pix]; + dpix_val = decode_pixel_aga(pix); + gpix = pix; + // borderblank starts 1 shres pixel early + if (cnt == denise_brdstrt) { + dpix_val = fullblack; + } } -#endif - quit_program = -quit_program; - set_inhibit_frame(monid, IHF_QUIT_PROGRAM); - set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); - return; + last_bpl_pix = pix; } - if (ad->framecnt == 0) { - init_drawing_frame(); - } else if (currprefs.cpu_memory_cycle_exact) { - init_hardware_for_drawing_frame(); + if (!denise_odd_even) { + // both even and odd shifting + bplshiftcnt[0] += denise_res_size2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + if (denise_bplfmode64) { + shiftbpl8_64(); + } else { + shiftbpl8(); + } + loaded_pix = getbpl(); + } + } else { + // even planes shifting + bplshiftcnt[0] += denise_res_size2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + if (denise_bplfmode64) { + shiftbpl8e_64(); + } else { + shiftbpl8e(); + } + loaded_pix = getbpl(); + } + // odd planes shifting + bplshiftcnt[1] += denise_res_size2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + if (denise_bplfmode64) { + shiftbpl8o_64(); + } else { + shiftbpl8o(); + } + loaded_pix = getbpl(); + } } - } else { -#if 0 - if (isvsync_chipset()) { - flush_screen(vidinfo->inbuffer, 0, 0); /* vsync mode */ + + int dhv = cnt & bplcon1_shift_mask_full; + if (!denise_odd_even) { + // both even and odd planes copy + if (bpldat_copy[0] && dhv == bplcon1_shift_full[0]) { + if (denise_bplfmode64) { + copybpl8_64(); + } else { + copybpl8(); + } + bplshiftcnt[0] = 0; + loaded_pix = getbpl(); + } + } else { + // even planes copy + if (bpldat_copy[0] && dhv == bplcon1_shift_full[0]) { + if (denise_bplfmode64) { + copybpl8e_64(); + } else { + copybpl8e(); + } + bplshiftcnt[0] = 0; + loaded_pix = getbpl(); + } + // odd planes copy + if (bpldat_copy[1] && dhv == bplcon1_shift_full[1]) { + if (denise_bplfmode64) { + copybpl8o_64(); + } else { + copybpl8o(); + } + bplshiftcnt[1] = 0; + loaded_pix = getbpl(); + } + } + + loaded_pixs[ipix] = loaded_pix; + + // sprite rendering + uae_u32 sv = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt = denise_render_sprites_aga(xadd); + if (!denise_blank_active && !sprites_hidden) { + sv = svt; + } + } + + if (sv) { + uae_u32 spix = denise_render_sprites2(pix, sv); + if (spix) { + dpix_val = denise_colors.acolors[spix]; + gpix = spix; + } } + dtbuf[h][ipix] = dpix_val; + dtgbuf[h][ipix] = gpix; + + // bitplane and sprite merge & output + if (!dpixcnt && buf1 && denise_pixtotal >= 0) { + + uae_u32 t = dtbuf[h ^ lol][ipix]; +#ifdef DEBUGGER + if (decode_specials_debug) { + t = decode_denise_specials_debug(t, cnt); + } #endif + *buf1++ = t; + *buf2++ = t; + if (gbuf) { + *gbuf++ = dtgbuf[h ^ lol][ipix]; + } + } + + dpixcnt += hresolution_add << xshift; + dpixcnt &= (1 << RES_SUPERHIRES) - 1; + + cnt += xadd; + cnt_next += xadd; } - gui_flicker_led (-1, 0, 0); -} + sprites_hidden = sprites_hidden2; -void hsync_record_line_state_last(int lineno, enum nln_how how, int changed) -{ - uae_u8 *state = linestate + lineno; +#ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; +#endif - switch (how) { - case nln_upper_black: - case nln_upper_black_always: - case nln_lower_black: - case nln_lower_black_always: - hsync_record_line_state(lineno, how, 0); - break; + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + + if (!denise_odd_even) { + bplshiftcnt[1] = bplshiftcnt[0]; } } -void hsync_record_line_state(int lineno, enum nln_how how, int changed) + +static void lts_unaligned_ecs(int cnt, int cnt_next, int h) { - struct amigadisplay *ad = &adisplays[0]; - uae_u8 *state; + if (!denise_odd_even) { + bplshiftcnt[1] = bplshiftcnt[0]; + } - if (ad->framecnt != 0) - return; + // hardwired hblank (both aga and ocs/ecs) + if (cnt_next == denise_hbstrt_lores) { + do_hbstrt(cnt); + } + if (cnt_next == denise_hbstop_lores) { + do_hbstop(cnt); + } - //write_log("%d:%d:%d ", lineno, how, lof_display); + // ocs/ecs hdiw + if (cnt == denise_hstrt_lores) { + do_hstrt_ecs(cnt); + } + if (cnt == denise_hstop_lores) { + do_hstop_ecs(cnt); + } + if (cnt == 0x40) { // BURST signal activation + burst_enable(); + } + if (cnt == 0x52) { // BURST signal deactivation + burst_disable(); + } + if (exthblankon_ecsonly) { + do_exthblankon_ecs(); + } - state = linestate + lineno; - changed |= ad->frame_redraw_necessary != 0 || refresh_indicator_buffer != NULL || - ((lineno >= lightpen_y1[0] && lineno < lightpen_y2[0]) || - (lineno >= lightpen_y1[1] && lineno < lightpen_y2[1])); + cnt <<= 2; + cnt_next <<= 2; - switch (how) { - case nln_normal: - *state = changed ? LINE_DECIDED : LINE_DONE; - break; - case nln_doubled: - *state = changed ? LINE_DECIDED_DOUBLE : LINE_DONE; - changed |= state[1] != LINE_REMEMBERED_AS_PREVIOUS; - state[1] = changed ? LINE_AS_PREVIOUS : LINE_DONE_AS_PREVIOUS; - break; - case nln_nblack: - *state = changed ? LINE_DECIDED : LINE_DONE; - if (state[1] != LINE_REMEMBERED_AS_BLACK) { - state[1] = LINE_BLACK; - } - break; - case nln_lower: - if (lineno > 0 && state[-1] == LINE_UNDECIDED) { - state[-1] = LINE_DECIDED; //LINE_BLACK; - } - *state = changed ? LINE_DECIDED : LINE_DONE; - break; - case nln_upper: - *state = changed ? LINE_DECIDED : LINE_DONE; - if (state[1] == LINE_UNDECIDED - || state[1] == LINE_REMEMBERED_AS_PREVIOUS - || state[1] == LINE_AS_PREVIOUS) - state[1] = LINE_DECIDED; //LINE_BLACK; - break; - case nln_lower_black_always: - state[1] = LINE_BLACK; - *state = LINE_DECIDED; - break; - case nln_lower_black: - changed |= state[0] != LINE_DONE; - *state = changed ? LINE_DECIDED : LINE_DONE; - state[1] = LINE_DONE; - break; - case nln_upper_black_always: - *state = LINE_DECIDED; - if (lineno > 0) { - state[-1] = LINE_BLACK; - } - break; - case nln_upper_black: - changed |= state[0] != LINE_DONE; - *state = changed ? LINE_DECIDED : LINE_DONE; - if (lineno > 0) { - state[-1] = LINE_DONE; - } - break; - } -} + matchsprites(cnt); -static void dummy_flush_line(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int line_no) -{ -} + int dpixcnt = 0; -static void dummy_flush_block(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) -{ -} + int ipix = 0; + for (int i = 0; i < (1 << RES_SUPERHIRES); i++, ipix++) { -static void dummy_flush_screen(struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) -{ -} + if (i == 2) { -static void dummy_flush_clear_screen(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) -{ -} + if (h) { + if (bpl1dat_unalign) { + bpl1dat_enable_bpls_aga(); + bpl1dat_unalign = false; + } + // DIWHIGH has extra 0.5 CCK delay + if (denise_diwhigh2 >= 0) { + denise_diwhigh = denise_diwhigh2; + denise_diwhigh2 = -1; + diwhigh_written = true; + calchdiw(); + } + } -static int dummy_lock(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) -{ - return 1; -} + } -static void dummy_unlock(struct vidbuf_description *gfxinfo, struct vidbuffer *vb) -{ -} + // bitplanes + uae_u32 dpix_val = 0; + uae_u8 pix = 0; + uae_u16 gpix = 0xffff; + if (!denise_blank_active) { + gpix = 0; + // borderblank ends 1 shres pixel early + dpix_val = cnt == denise_brdstop ? denise_colors.acolors[0] : bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix = getbpl6(); -static void gfxbuffer_reset(int monid) -{ - struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo; - vidinfo->drawbuffer.flush_line = dummy_flush_line; - vidinfo->drawbuffer.flush_block = dummy_flush_block; - vidinfo->drawbuffer.flush_screen = dummy_flush_screen; - vidinfo->drawbuffer.flush_clear_screen = dummy_flush_clear_screen; - vidinfo->drawbuffer.lockscr = dummy_lock; - vidinfo->drawbuffer.unlockscr = dummy_unlock; -} +#if 0 + if (reswitch_unalign == 2 && i >= 2) { + pix = 0; + } + if (reswitch_unalign == 3 && i >= 2) { + pix = 0; + } +#endif -void notice_resolution_seen (int res, bool lace) -{ - if (res > frame_res) - frame_res = res; - if (res > 0) - can_use_lores = 0; - if (!frame_res_lace && lace) - frame_res_lace = lace; -} + // odd to even bitplane collision + clxdat |= bplcoltable[pix]; + if (decode_specials) { + pix = decode_denise_specials(pix); + } + dpix_val = aga_mode ? decode_pixel_aga(pix) : decode_pixel(pix); + gpix = pix; + // borderblank starts 1 shres pixel early + if (cnt == denise_brdstrt) { + dpix_val = fullblack; + } + last_bpl_pix = pix; + } + } -bool notice_interlace_seen (int monid, bool lace) -{ - struct amigadisplay *ad = &adisplays[0]; - bool changed = false; - bool interlace_on = false; + if (bplcon1_shift[0] == bplcon1_shift[1]) { + // both even and odd shifting + bplshiftcnt[0] += denise_res_size; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + } + } else { + // even planes shifting + bplshiftcnt[0] += denise_res_size; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + } + // odd planes shifting + bplshiftcnt[1] += denise_res_size; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + } + } - // non-lace to lace switch (non-lace active at least one frame)? - if (lace) { - if (interlace_seen == 0) { - changed = true; - interlace_on = true; - //write_log (_T("->lace PC=%x\n"), m68k_getpc ()); + // sprite rendering + uae_u32 sv = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt = denise_render_sprites(); + if (!denise_blank_active && !sprites_hidden) { + sv = svt; + } } - interlace_seen = currprefs.gfx_vresolution ? 1 : -1; - } else { - if (interlace_seen) { - changed = true; - //write_log (_T("->non-lace PC=%x\n"), m68k_getpc ()); + + if (sv) { + uae_u32 spix = denise_render_sprites2(pix, sv); + if (spix) { + dpix_val = denise_colors.acolors[spix]; + gpix = spix; + } } - interlace_seen = 0; - } + dtbuf[h][ipix] = dpix_val; + dtgbuf[h][ipix] = gpix; - if (changed) { - if (currprefs.gf[GF_INTERLACE].enable && memcmp(&currprefs.gf[GF_NORMAL], &currprefs.gf[GF_INTERLACE], sizeof(struct gfx_filterdata))) { - changed_prefs.gf[GF_NORMAL].changed = true; - changed_prefs.gf[GF_INTERLACE].changed = true; - if (ad->interlace_on != interlace_on) { - ad->interlace_on = interlace_on; - set_config_changed(); + // bitplane and sprite merge & output + if (!dpixcnt && buf1 && denise_pixtotal >= 0) { + + uae_u32 t = dtbuf[h ^ lol][ipix]; + +#ifdef DEBUGGER + if (decode_specials_debug) { + t = decode_denise_specials_debug(t, cnt); } - } else { - ad->interlace_on = false; +#endif + +#if 0 + if (reswitch_unalign < 0) { + t |= 0x0000ff; + } else if (reswitch_unalign == 1) { + t |= 0xffff00; + } +#endif + + *buf1++ = t; + *buf2++ = t; + if (gbuf) { + *gbuf++ = dtgbuf[h ^ lol][ipix]; + } + } + + dpixcnt += hresolution_add; + dpixcnt &= (1 << RES_SUPERHIRES) - 1; + + cnt++; + cnt_next++; } - if (!ad->picasso_on) { - if (ad->interlace_on) { - ad->gf_index = GF_INTERLACE; - } else { - ad->gf_index = GF_NORMAL; + int dhv = denise_hcounter & bplcon1_shift_mask; + if (bplcon1_shift[0] == bplcon1_shift[1]) { + // both even and odd planes copy + if (bpldat_copy[0] && dhv == bplcon1_shift[0]) { + copybpl6(); } } else { - ad->gf_index = GF_RTG; + // even planes copy + if (bpldat_copy[0] && dhv == bplcon1_shift[0]) { + copybpl6e(); + } + // odd planes copy + if (bpldat_copy[1] && dhv == bplcon1_shift[1]) { + copybpl6o(); + } } - return changed; -} - -void allocvidbuffer(int monid, struct vidbuffer *buf, int width, int height, int depth) -{ - memset(buf, 0, sizeof (struct vidbuffer)); - buf->monitor_id = monid; - buf->pixbytes = (depth + 7) / 8; - buf->width_allocated = (width + 7) & ~7; - buf->height_allocated = height; + sprites_hidden = sprites_hidden2; - buf->outwidth = buf->width_allocated; - buf->outheight = buf->height_allocated; - buf->inwidth = buf->width_allocated; - buf->inheight = buf->height_allocated; +#ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; +#endif - buf->rowbytes = buf->width_allocated * buf->pixbytes; - int size = buf->rowbytes * buf->height_allocated; - buf->realbufmem = xcalloc(uae_u8, size); - buf->bufmem_allocated = buf->bufmem = buf->realbufmem; - buf->bufmemend = buf->realbufmem + size - buf->rowbytes; - buf->bufmem_lockable = true; -} + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; -void freevidbuffer(int monid, struct vidbuffer *buf) -{ - xfree (buf->realbufmem); - memset (buf, 0, sizeof (struct vidbuffer)); + if (!denise_odd_even) { + bplshiftcnt[1] = bplshiftcnt[0]; + } } -void reset_drawing(void) -{ - int monid = 0; - struct amigadisplay *ad = &adisplays[monid]; - struct vidbuf_description *vidinfo = &ad->gfxvidinfo; - - syncdebug = currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA; - max_diwstop = 0; - vb_state = 0; - exthblank = 0; - exthblank_force = false; - exthblank_set = syncdebug ? -1 : 1; - exthblanken = false; - exthblankon = false; - extborder = false; - display_reset = 1; - ehb_enable = true; - hblank_debug = vblank_debug = hsync_debug = vsync_debug = false; - hcenter_debug = 0; +/* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time +constant. That will cause some unnecessary code to be optimized away. +Don't touch this if you don't know what you are doing. */ - lores_reset (); +#define MERGE(a,b,mask,shift) do {\ + uae_u32 tmp = mask & (a ^ (b >> shift)); \ + a ^= tmp; \ + b ^= (tmp << shift); \ +} while (0) - reset_decision_table(); +#define MERGE64(a,b,mask,shift) do {\ + uae_u64 tmp = mask & (a ^ (b >> shift)); \ + a ^= tmp; \ + b ^= (tmp << shift); \ +} while (0) - init_aspect_maps (); - init_row_map (); +#define GETLONG32(P) (*(uae_u32*)P) +#define GETLONG64(P) (*(uae_u64*)P) - last_redraw_point = 0; +STATIC_INLINE void pfield_doline32_1(uae_u32 *pixels, int wordcount, int planes, uae_u8 *real_bplpt[8]) +{ + while (wordcount-- > 0) { + uae_u32 b0, b1, b2, b3, b4, b5, b6, b7; - memset(spixels, 0, sizeof spixels); - memset(&spixstate, 0, sizeof spixstate); - memset(spritepixels_buffer, 0, sizeof(spritepixels_buffer)); - memset(line_data, 0, sizeof(line_data)); - memset(ham_linebuf, 0, sizeof(ham_linebuf)); + b0 = 0, b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0, b6 = 0, b7 = 0; + switch (planes) { +#ifdef AGA + case 8: b0 = GETLONG32(real_bplpt[7]); real_bplpt[7] += 4; + case 7: b1 = GETLONG32(real_bplpt[6]); real_bplpt[6] += 4; +#endif + case 6: b2 = GETLONG32(real_bplpt[5]); real_bplpt[5] += 4; + case 5: b3 = GETLONG32(real_bplpt[4]); real_bplpt[4] += 4; + case 4: b4 = GETLONG32(real_bplpt[3]); real_bplpt[3] += 4; + case 3: b5 = GETLONG32(real_bplpt[2]); real_bplpt[2] += 4; + case 2: b6 = GETLONG32(real_bplpt[1]); real_bplpt[1] += 4; + case 1: b7 = GETLONG32(real_bplpt[0]); real_bplpt[0] += 4; + } - init_hardware_for_drawing_frame(); - - notice_screen_contents_lost(monid); - init_drawing_frame (); - pfield_set_linetoscr(); + MERGE(b0, b1, 0x55555555, 1); + MERGE(b2, b3, 0x55555555, 1); + MERGE(b4, b5, 0x55555555, 1); + MERGE(b6, b7, 0x55555555, 1); - frame_res_cnt = currprefs.gfx_autoresolution_delay; - lightpen_y1[0] = lightpen_y2[0] = -1; - lightpen_y1[1] = lightpen_y2[1] = -1; + MERGE(b0, b2, 0x33333333, 2); + MERGE(b1, b3, 0x33333333, 2); + MERGE(b4, b6, 0x33333333, 2); + MERGE(b5, b7, 0x33333333, 2); - reset_custom_limits (); + MERGE(b0, b4, 0x0f0f0f0f, 4); + MERGE(b1, b5, 0x0f0f0f0f, 4); + MERGE(b2, b6, 0x0f0f0f0f, 4); + MERGE(b3, b7, 0x0f0f0f0f, 4); - clearbuffer (&vidinfo->drawbuffer); - clearbuffer (&vidinfo->tempbuffer); + MERGE(b0, b1, 0x00ff00ff, 8); + MERGE(b2, b3, 0x00ff00ff, 8); + MERGE(b4, b5, 0x00ff00ff, 8); + MERGE(b6, b7, 0x00ff00ff, 8); - center_reset = 1; - ad->specialmonitoron = false; - bplcolorburst_field = 1; - ecs_genlock_features_active = false; - aga_genlock_features_zdclken = false; - ecs_genlock_features_colorkey = false; + MERGE(b0, b2, 0x0000ffff, 16); + //pixels[0] = b0; + //pixels[4] = b2; + do_put_mem_long(pixels + 0, b0); + do_put_mem_long(pixels + 4, b2); + MERGE(b1, b3, 0x0000ffff, 16); + //pixels[2] = b1; + //pixels[6] = b3; + do_put_mem_long(pixels + 2, b1); + do_put_mem_long(pixels + 6, b3); + MERGE(b4, b6, 0x0000ffff, 16); + //pixels[1] = b4; + //pixels[5] = b6; + do_put_mem_long(pixels + 1, b4); + do_put_mem_long(pixels + 5, b6); + MERGE(b5, b7, 0x0000ffff, 16); + //pixels[3] = b5; + //pixels[7] = b7; + do_put_mem_long(pixels + 3, b5); + do_put_mem_long(pixels + 7, b7); + pixels += 8; + } } -static void gen_direct_drawing_table(void) -{ +/* See above for comments on inlining. These functions should _not_ +be inlined themselves. */ +static void NOINLINE pfield_doline32_n1(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 1, real_bplpt); } +static void NOINLINE pfield_doline32_n2(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 2, real_bplpt); } +static void NOINLINE pfield_doline32_n3(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 3, real_bplpt); } +static void NOINLINE pfield_doline32_n4(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 4, real_bplpt); } +static void NOINLINE pfield_doline32_n5(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 5, real_bplpt); } +static void NOINLINE pfield_doline32_n6(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 6, real_bplpt); } #ifdef AGA - // BYPASS color table - for (int i = 0; i < 256; i++) { - uae_u32 v = (i << 16) | (i << 8) | i; - direct_colors_for_drawing.acolors[i] = CONVERT_RGB(v); - } +static void NOINLINE pfield_doline32_n7(uae_u32 *data, int count, uae_u8* real_bplpt[8]) { pfield_doline32_1(data, count, 7, real_bplpt); } +static void NOINLINE pfield_doline32_n8(uae_u32 *data, int count, uae_u8 *real_bplpt[8]) { pfield_doline32_1(data, count, 8, real_bplpt); } +#endif + +static void pfield_doline(int planecnt, int wordcount, uae_u8 *real_bplpt[8], uae_u32 *data) +{ + switch (planecnt) { + default: break; + case 0: memset(data, 0, wordcount * 32); break; + case 1: pfield_doline32_n1(data, wordcount, real_bplpt); break; + case 2: pfield_doline32_n2(data, wordcount, real_bplpt); break; + case 3: pfield_doline32_n3(data, wordcount, real_bplpt); break; + case 4: pfield_doline32_n4(data, wordcount, real_bplpt); break; + case 5: pfield_doline32_n5(data, wordcount, real_bplpt); break; + case 6: pfield_doline32_n6(data, wordcount, real_bplpt); break; +#ifdef AGA + case 7: pfield_doline32_n7(data, wordcount, real_bplpt); break; + case 8: pfield_doline32_n8(data, wordcount, real_bplpt); break; #endif + } } -void drawing_init (void) +static uae_u32 chunky_out[2048]; +bool draw_denise_line_fast(uae_u8 *bplpt[8], int bplstart, int bpllen, int gfx_ypos, enum nln_how how, int dstart, int dtotal, bool vblank, struct denise_fastsprite *dfs) { - int monid = 0; - struct amigadisplay *ad = &adisplays[monid]; - struct vidbuf_description *vidinfo = &ad->gfxvidinfo; + int pos; + int end = dstart + dtotal; + uae_u8 *c = (uae_u8*)chunky_out; - refresh_indicator_init(); + get_line(gfx_ypos, how); - gen_pfield_tables(); + if (!buf1) { + return true; + } - gen_direct_drawing_table(); + if (vblank) { + memset(buf1, 0, dtotal * sizeof(uae_u32)); + if (buf1 != buf2) { + memset(buf2, 0, dtotal * sizeof(uae_u32)); + } + return true; + } - uae_sem_init (&gui_sem, 0, 1); -#ifdef PICASSO96 - if (!isrestore ()) { - ad->picasso_on = 0; - ad->picasso_requested_on = 0; - ad->gf_index = GF_NORMAL; - gfx_set_picasso_state(0, 0); + uae_u32 *buf1p = buf1; + uae_u32 *buf2p = buf2; + uae_u32* buf1e = buf1 + (end - dstart); + + if (bpllen > 0) { + pfield_doline(denise_planes, bpllen, bplpt, chunky_out); } -#endif - xlinebuffer = vidinfo->drawbuffer.bufmem; - xlinebuffer_genlock = NULL; - ad->inhibit_frame = 0; + int hstrt = denise_hstrt >> 1; + int hstop = denise_hstop >> 1; + int hbstrt = denise_hbstrt_lores * 2; + int hbstop = denise_hbstop_lores * 2; + if (hbstrt < hbstop) { + hbstrt += maxhpos * 2 * 2; + } + bplstart *= 2; - gfxbuffer_reset(0); - reset_drawing(); + // bitplanes + int bplstoppos = -1; + if (bpllen > 0) { + pos = bplstart + 34; + buf1 = buf1p + (pos - dstart); + buf2 = buf2p + (pos - dstart); + int shift = bplcon1_shift[0] << denise_res; + int delay = shift; + while (0 && delay > 0) { + *buf1++ = bordercolor; + *buf2++ = bordercolor; + pos++; + delay--; + } + while (pos < hstop && pos < end) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 8; j++) { + uae_u8 pixc = c[(3 - i) * 8 + j]; + uae_u32 pix = denise_colors.acolors[pixc]; + *buf1++ = pix; + *buf2++ = pix; + pos++; + if (denise_res == 0) { + *buf1++ = pix; + *buf2++ = pix; + pos++; + } + } + } + c += 32; + } + bplstoppos = pos; + } + + // sprites + if (dfs && (bpllen > 0 || bordersprite)) { + for (int i = MAX_SPRITES - 1; i >= 0; i--) { + struct denise_fastsprite *fs = &dfs[i]; + if (fs->active) { + int sprxp = (fs->pos & 0xff) * 2 + (fs->ctl & 1); + sprxp += 1; + sprxp *= 2; + buf1 = buf1p + (sprxp - dstart); + buf2 = buf2p + (sprxp - dstart); + if (denise_sprfmode < 2) { + int max = denise_sprfmode ? 32 : 16; + int shift = max - 1; + uae_u32 v0 = fs->data[0]; + uae_u32 v1 = fs->data[1]; + for (int p = 0; p < max && buf1 < buf1e; p++) { + int b1 = (v0 >> shift) & 1; + int b2 = (v1 >> shift) & 1; + v0 <<= 1; + v1 <<= 1; + int c = b2 * 2 + b1; + if (c) { + uae_u32 pix = denise_colors.acolors[c + sbasecol[i & 1]]; + *buf1++ = pix; + *buf2++ = pix; + if (denise_sprres == 0) { + *buf1++ = pix; + *buf2++ = pix; + } + } else { + buf1++; + buf2++; + if (denise_sprres == 0) { + buf1++; + buf2++; + } + } + } + } else { + uae_u64 v0 = fs->data64[0]; + uae_u64 v1 = fs->data64[1]; + for (int p = 0; p < 64 && buf1 < buf1e; p++) { + int b1 = (v0 >> 63) & 1; + int b2 = (v1 >> 63) & 1; + v0 <<= 1; + v1 <<= 1; + int c = b2 * 2 + b1; + if (c) { + uae_u32 pix = denise_colors.acolors[c + sbasecol[i & 1]]; + *buf1++ = pix; + *buf2++ = pix; + if (denise_sprres == 0) { + *buf1++ = pix; + *buf2++ = pix; + } + } else { + buf1++; + buf2++; + if (denise_sprres == 0) { + buf1++; + buf2++; + } + } + } + } + } + } + + } + + // borders and blanking + pos = dstart; + buf1 = buf1p; + buf2 = buf2p; + while (pos < hbstop && pos < end) { + *buf1++ = 0xff00ff; + *buf2++ = 0xff00ff; + pos++; + } + while (pos < hstrt && pos < end) { + *buf1++ = bordercolor; + *buf2++ = bordercolor; + pos++; + } + if (bplstoppos > 0) { + int opos = pos; + pos = bplstoppos; + if (pos > hstop) { + pos = hstop; + } + buf1 += pos - opos; + buf2 += pos - opos; + } + while (pos < hbstrt && pos < end) { + *buf1++ = bordercolor; + *buf2++ = bordercolor; + pos++; + } + while (pos < end) { + *buf1++ = 0xff00ff; + *buf2++ = 0xff00ff; + pos++; + } + + return true; } -int isvsync_chipset(void) +#define RB restore_u8() +#define SRB restore_s8() +#define RW restore_u16() +#define RL restore_u32() +#define RQ restore_u64() +#define SB save_u8 +#define SW save_u16 +#define SL save_u32 +#define SQ save_u64 + +uae_u16 save_custom_bpl_dat(int num) { - struct amigadisplay *ad = &adisplays[0]; - if (ad->picasso_on || currprefs.gfx_apmode[0].gfx_vsync <= 0) - return 0; - if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0) - return 1; - if (currprefs.m68k_speed >= 0) - return -1; - return currprefs.cachesize ? -3 : -2; + return bplxdat[num]; } - -int isvsync_rtg(void) +void restore_custom_bpl_dat(int num, uae_u16 dat) { - struct amigadisplay *ad = &adisplays[0]; - if (!ad->picasso_on || currprefs.gfx_apmode[1].gfx_vsync <= 0) - return 0; - if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0) - return 1; - if (currprefs.m68k_speed >= 0) - return -1; - return currprefs.cachesize ? -3 : -2; + bplxdat[num] = dat; } -int isvsync(void) +uae_u8 *save_custom_bpl(size_t *len, uae_u8 *dstptr) { - struct amigadisplay *ad = &adisplays[0]; - if (ad->picasso_on) - return isvsync_rtg (); + uae_u8 *dstbak, *dst; + + if (dstptr) + dstbak = dst = dstptr; else - return isvsync_chipset (); + dstbak = dst = xmalloc(uae_u8, 30); + + SL(1); + for (int i = 0; i < 8; i++) { + SL(bplxdat[i]); + SL(bplxdat2[i]); + SL(bplxdat3[i]); + SQ(bplxdat_64[i]); + SQ(bplxdat2_64[i]); + SQ(bplxdat3_64[i]); + } + + *len = dst - dstbak; + return dstbak; +} + +uae_u8 *restore_custom_bpl(uae_u8 *src) +{ + uae_u32 v = RL; + + for (int i = 0; i < 8; i++) { + bplxdat[i] = RL; + bplxdat2[i] = RL; + bplxdat3[i] = RL; + bplxdat_64[i] = RQ; + bplxdat2_64[i] = RQ; + bplxdat3_64[i] = RQ; + } + + return src; +} + +uae_u8 *save_custom_sprite_denise(int num, uae_u8 *dst) +{ + struct denise_spr *s = &dspr[num]; + + if (denise_sprfmode64) { + SW(s->dataa64 >> 48); + SW(s->datab64 >> 48); + SW((uae_u16)(s->dataa64 >> 32)); + SW((uae_u16)(s->datab64 >> 32)); + SW((uae_u16)(s->dataa64 >> 16)); + SW((uae_u16)(s->datab64 >> 16)); + SW((uae_u16)(s->dataa64 >> 0)); + SW((uae_u16)(s->datab64 >> 0)); + } else { + SW(s->dataa >> 16); + SW(s->datab >> 16); + SW(0); + SW(0); + SW(0); + SW(0); + SW(0); + SW(0); + } + uae_u8 f = (s->armed ? 1 : 0) | (s->fmode << 1); + SB(f); + + return dst; +} + +uae_u8 *restore_custom_sprite_denise(int num, uae_u8 *src, uae_u16 pos, uae_u16 ctl) +{ + struct denise_spr *s = &dspr[num]; + uae_u16 data[4], datb[4]; + + sprwrite(num * 8 + 0, pos); + sprwrite(num * 8 + 2, ctl); + + data[0] = RW; + datb[0] = RW; + data[1] = RW; + datb[1] = RW; + data[2] = RW; + datb[2] = RW; + data[3] = RW; + datb[3] = RW; + + uae_u8 f = RB; + int armed = f & 1; + s->fmode = (f >> 1) & 3; + s->dataa = data[0] << 16; + s->datab = datb[0] << 16; + s->dataa64 = (data[0] << 16) | (data[1]); + s->datab64 = (datb[0] << 16) | (datb[1]); + spr_arm(s, armed); + + if (denise_sprfmode64) { + s->dataa64 <<= 32; + s->datab64 <<= 32; + s->dataa64 |= (data[2] << 16) | (data[3]); + s->datab64 |= (datb[2] << 16) | (datb[3]); + } + + return src; } diff --git a/events.cpp b/events.cpp index 4a22f987..a6fc1541 100644 --- a/events.cpp +++ b/events.cpp @@ -23,7 +23,13 @@ static const int pissoff_nojit_value = 256 * CYCLE_UNIT; +extern uae_u8 agnus_hpos; +int custom_fastmode; +extern int linear_hpos; +void custom_trigger_start_fast(void); + evt_t event_cycles, nextevent, currcycle; +uae_u32 currcycle_cck; int is_syncline; static int syncline_cnt; frame_time_t is_syncline_end; @@ -50,10 +56,8 @@ void events_reset_syncline(void) void events_schedule(void) { - int i; - evt_t mintime = EVT_MAX; - for (i = 0; i < ev_max; i++) { + for (int i = 0; i < ev_max; i++) { if (eventtab[i].active) { evt_t eventtime = eventtab[i].evtime - currcycle; if (eventtime < mintime) @@ -249,6 +253,7 @@ static bool event_check_vsync(void) pissoff = pissoff_value; else pissoff = pissoff_nojit_value; + return true; } } @@ -257,6 +262,31 @@ static bool event_check_vsync(void) return false; } +void do_cycles_normal(int cycles_to_add) +{ + while ((nextevent - currcycle) <= cycles_to_add) { + + cycles_to_add -= (int)(nextevent - currcycle); + currcycle = nextevent; + + for (int i = 0; i < ev_max; i++) { + if (eventtab[i].active && eventtab[i].evtime == currcycle) { + if (eventtab[i].handler == NULL) { + gui_message(_T("eventtab[%d].handler is null!\n"), i); + eventtab[i].active = 0; + } else { + (*eventtab[i].handler)(); + } + } + } + events_schedule(); + + } + currcycle += cycles_to_add; +} + +static int cycles_to_add_remain; + void do_cycles_slow(int cycles_to_add) { #ifdef WITH_X86 @@ -271,9 +301,10 @@ void do_cycles_slow(int cycles_to_add) syncline_cnt--; return; } + if (is_syncline) { // runs CPU emulation with chipset stopped - // when there is free time to do so + // when there is free time to do so. if (event_check_vsync()) { syncline_cnt = 16; return; @@ -281,85 +312,86 @@ void do_cycles_slow(int cycles_to_add) } if (!currprefs.cpu_thread) { - if ((pissoff -= cycles_to_add) >= 0) + if ((pissoff -= cycles_to_add) >= 0) { return; - + } cycles_to_add = -pissoff; pissoff = 0; } else { pissoff = 0x40000000; } - while ((nextevent - currcycle) <= cycles_to_add) { + cycles_to_add += cycles_to_add_remain; + cycles_to_add_remain = 0; - if (is_syncline) { - if (event_check_vsync()) - return; + while (cycles_to_add >= CYCLE_UNIT) { + + if (custom_fastmode <= 0) { + int cyc = cycles_to_add & ~(CYCLE_UNIT - 1); + cyc = do_cycles_cck(cyc); + cycles_to_add -= cyc; + } else { + do_cycles_normal(cycles_to_add); + cycles_to_add = 0; } - cycles_to_add -= (int)(nextevent - currcycle); - currcycle = nextevent; +#if 0 - for (int i = 0; i < ev_max; i++) { - if (eventtab[i].active && eventtab[i].evtime == currcycle) { - if (eventtab[i].handler == NULL) { - gui_message(_T("eventtab[%d].handler is null!\n"), i); - eventtab[i].active = 0; - } else { - (*eventtab[i].handler)(); + while (custom_fastmode && cycles_to_add >= CYCLE_UNIT) { + int max = -1; + if (agnus_hpos == 2) { + custom_trigger_start_fast(); + } else if (agnus_hpos == 1) { + custom_trigger_start_fast(); + if (!custom_fastmode) { + max = 1; + } + } + if (max < 0) { + max = maxhpos - agnus_hpos + 1; + } + if (agnus_hpos == 0 || agnus_hpos == 1) { + max = 1; + } + if (max * CYCLE_UNIT > cycles_to_add) { + max = cycles_to_add / CYCLE_UNIT; + } + do_cycles_normal(max * CYCLE_UNIT); + cycles_to_add -= max * CYCLE_UNIT; + agnus_hpos += max; + linear_hpos += max; + currcycle_cck += max; + if (agnus_hpos >= maxhpos) { + agnus_hpos -= maxhpos; } } - } - events_schedule(); - +#endif } - currcycle += cycles_to_add; + + int remain = cycles_to_add & (CYCLE_UNIT - 1); + cycles_to_add_remain += remain; } -static ev2 *last_event2; -static ev2 dummy_event; +static int event2idx; void MISC_handler(void) { - static bool dorecheck; - bool recheck; - int i; evt_t mintime; evt_t ct = get_cycles(); - static int recursive; - if (recursive) { - dorecheck = true; - return; - } - recursive++; eventtab[ev_misc].active = 0; - recheck = true; - while (recheck) { - recheck = false; - mintime = EVT_MAX; - for (i = 0; i < ev2_max; i++) { - ev2 *e = &eventtab2[i]; - if (e->active) { - if (e->evtime == ct) { - e->active = false; - e->handler(e->data); - ev2 *e2 = e->next; - if (e2) { - e->next = NULL; - if (e2->active && e2->evtime == e->evtime + 1) { - e2->active = false; - e2->handler(e2->data); - } - } - if (dorecheck || e->active) { - recheck = true; - dorecheck = false; - } - } else { - evt_t eventtime = e->evtime - ct; - if (eventtime < mintime) - mintime = eventtime; + mintime = EVT_MAX; + for (int i = 0; i < ev2_max; i++) { + int idx = (event2idx + i) & (ev2_max - 1); + ev2 *e = &eventtab2[idx]; + if (e->active) { + if (e->evtime == ct) { + e->active = false; + e->handler(e->data); + } else { + evt_t eventtime = e->evtime - ct; + if (eventtime < mintime) { + mintime = eventtime; } } } @@ -371,7 +403,6 @@ void MISC_handler(void) e->evtime = ct + mintime; events_schedule(); } - recursive--; } void event2_newevent_xx_ce(evt_t t, uae_u32 data, evfunc2 func) @@ -425,16 +456,11 @@ void event2_newevent_xx(int no, evt_t t, uae_u32 data, evfunc2 func) next = no; } ev2 *e = &eventtab2[no]; - // if previous event has same expiry time, make sure it gets executed first. - if (last_event2->active && last_event2 != e && et == last_event2->evtime) { - last_event2->next = e; - et++; - } e->active = true; e->evtime = et; e->handler = func; e->data = data; - last_event2 = e; + event2idx = (e - eventtab2) + 1; MISC_handler(); } @@ -474,17 +500,6 @@ void event2_newevent_x_replace(evt_t t, uae_u32 data, evfunc2 func) void event_init(void) { - last_event2 = &dummy_event; -} - -int current_hpos(void) -{ - int hp = current_hpos_safe(); - if (hp < 0 || hp > 256) { - gui_message(_T("hpos = %d!?\n"), hp); - hp = 0; - } - return hp; } void clear_events(void) diff --git a/genblitter.cpp b/genblitter.cpp index 81678025..ab4ac5e7 100644 --- a/genblitter.cpp +++ b/genblitter.cpp @@ -53,8 +53,8 @@ static void generate_func(void) printf("uae_u32 totald = 0;\n"); if (b_is_on) printf("uae_u32 srcb = b->bltbhold;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n"); - printf("uae_u16 ashift = bltcon0 >> 12;\n"); - printf("uae_u16 bshift = bltcon1 >> 12;\n"); + printf("uae_u16 ashift = blt_info.bltcon0 >> 12;\n"); + printf("uae_u16 bshift = blt_info.bltcon1 >> 12;\n"); printf("uae_u32 dstd=0;\n"); printf("uaecptr dstp = 0;\n"); printf("for (j = 0; j < b->vblitsize; j++) {\n"); @@ -92,8 +92,8 @@ static void generate_func(void) printf("int i,j;\n"); if (b_is_on) printf("uae_u32 srcb = b->bltbhold;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n"); - printf("uae_u16 ashift = 16 - (bltcon0 >> 12);\n"); - printf("uae_u16 bshift = 16 - (bltcon1 >> 12);\n"); + printf("uae_u16 ashift = 16 - (blt_info.bltcon0 >> 12);\n"); + printf("uae_u16 bshift = 16 - (blt_info.bltcon1 >> 12);\n"); printf("uae_u32 dstd = 0;\n"); printf("uaecptr dstp = 0;\n"); printf("for (j = 0; j < b->vblitsize; j++) {\n"); diff --git a/genlinetoscr.cpp b/genlinetoscr.cpp index cfbf3fa2..a55a30f7 100644 --- a/genlinetoscr.cpp +++ b/genlinetoscr.cpp @@ -1,9 +1,9 @@ /* -* E-UAE - The portable Amiga Emulator +* UAE - The portable Amiga Emulator * -* Generate pixel output code. +* Generate Denise/Lisa emulation pixel output code. * -* (c) 2006 Richard Drummond +* (c) 2024 Toni Wilen */ #include "sysconfig.h" @@ -13,627 +13,1317 @@ #include #include -/* Output for big-endian target if true, little-endian is false. */ -int do_bigendian; - -typedef int DEPTH_T; - -#define DEPTH_8BPP 0 -#define DEPTH_16BPP 1 -#define DEPTH_32BPP 2 -#define DEPTH_MAX DEPTH_32BPP - -static const char *get_depth_str (DEPTH_T bpp) -{ - if (bpp == DEPTH_8BPP) - return "8"; - else if (bpp == DEPTH_16BPP) - return "16"; - else - return "32"; -} - -static const char *get_depth_type_str (DEPTH_T bpp) -{ - if (bpp == DEPTH_8BPP) - return "uae_u8"; - else if (bpp == DEPTH_16BPP) - return "uae_u16"; - else - return "uae_u32"; -} - -typedef int HMODE_T; - -#define HMODE_NORMAL 0 -#define HMODE_DOUBLE 1 -#define HMODE_DOUBLE2X 2 -#define HMODE_HALVE1 3 -#define HMODE_HALVE1F 4 -#define HMODE_HALVE2 5 -#define HMODE_HALVE2F 6 -#define HMODE_MAX HMODE_HALVE2F - -static const char *get_hmode_str (HMODE_T hmode) -{ - if (hmode == HMODE_DOUBLE) - return "_stretch1"; - else if (hmode == HMODE_DOUBLE2X) - return "_stretch2"; - else if (hmode == HMODE_HALVE1) - return "_shrink1"; - else if (hmode == HMODE_HALVE1F) - return "_shrink1f"; - else if (hmode == HMODE_HALVE2) - return "_shrink2"; - else if (hmode == HMODE_HALVE2F) - return "_shrink2f"; - else - return ""; -} - +static FILE *outfile; +static int outfile_indent = 0; +static int aga, outres, res, planes, modes, bplfmode, sprres, oddeven, ecsshres, genlock, ntsc; +static int maxplanes = 8; +static char funcnames[500000]; +static char *funcnamep; typedef enum { CMODE_NORMAL, CMODE_DUALPF, CMODE_EXTRAHB, - CMODE_EXTRAHB_ECS_KILLEHB, - CMODE_HAM + CMODE_HAM, + CMODE_EXTRAHB_ECS_KILLEHB } CMODE_T; -#define CMODE_MAX CMODE_HAM - - -static FILE *outfile; -static unsigned int outfile_indent = 0; - -static void set_outfile (FILE *f) -{ - outfile = f; -} -static int set_indent (int indent) +static void outindent(void) { - int old_indent = outfile_indent; - outfile_indent = indent; - return old_indent; + for (int i = 0; i < outfile_indent; i++) { + fputc('\t', outfile); + } } - -static void outindent(void) +static void doindent(const char *s) { - unsigned int i; - for (i = 0; i < outfile_indent; i++) - fputc(' ', outfile); + if (strchr(s, '}') && strchr(s, '{')) { + outfile_indent--; + outindent(); + outfile_indent++; + } else if (strchr(s, '}')) { + outfile_indent--; + outindent(); + } else if (strchr(s, '{')) { + outindent(); + outfile_indent++; + } else { + outindent(); + } } static void outf(const char *s, ...) { va_list ap; + while (*s == ' ' || *s == '\t') { + s++; + } + doindent(s); va_start(ap, s); vfprintf(outfile, s, ap); + fprintf(outfile, "\n"); } -static void outln (const char *s) +static void outln(const char *s) { - outindent(); + doindent(s); fprintf (outfile, "%s\n", s); } -static void outlnf (const char *s, ...) +static void outlnf(const char *s, ...) { va_list ap; - outindent(); + while (*s == ' ' || *s == '\t') { + s++; + } + doindent(s); va_start (ap, s); vfprintf (outfile, s, ap); fputc ('\n', outfile); } -static void out_linetoscr_decl (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, int genlock) +static void closefile(void) { - if (spr < 0) { - outlnf("static int NOINLINE linetoscr_%s%s%s%s%s(int spix, int dpix, int dpix_end, int blank)", - get_depth_str(bpp), - get_hmode_str(hmode), aga ? "_aga" : "", "_spronly", genlock ? "_genlock" : ""); - } else { - outlnf("static int NOINLINE linetoscr_%s%s%s%s%s(int spix, int dpix, int dpix_end)", - get_depth_str(bpp), - get_hmode_str(hmode), aga ? "_aga" : "", spr > 0 ? "_spr" : "", genlock ? "_genlock" : ""); + if (outfile) { + fclose(outfile); + } + outfile = NULL; +} +static void set_outfile(const char *name) +{ + closefile(); + outfile = fopen(name, "w"); + outf("/*"); + outf(" * UAE - The portable Amiga emulator."); + outf(" *"); + outf(" * This file was generated by genlinetoscr. Don't edit."); + outf(" */"); + outf(""); +} + +static void gen_hdiw(void) +{ + if (!aga) { + outf("if (cnt == denise_hstrt_lores) {"); + outf(" do_hstrt_ecs();"); + outf("}"); + outf("if (cnt == denise_hstop_lores) {"); + outf(" do_hstop_ecs();"); + outf("}"); + } +} +static void gen_hdiw_aga(int add) +{ + if (aga) { + outf("if (cnt + %d == denise_hstrt) {", add); + outf(" do_hstrt_aga();"); + outf("}"); + outf("if (cnt + %d == denise_hstop) {", add); + outf(" do_hstop_aga();"); + outf("}"); } } -static void out_linetoscr_do_srcpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) +static void gen_hblank(int add) { - if (spr < 0) { - outln ( " sprpix_val = 0;"); + if (!aga) { + outf("if (cnt == denise_hbstrt) {"); + outf("do_hbstrt();"); + outf("}"); + outf("if (cnt == denise_hbstop) {"); + outf("do_hbstop();"); + outf("}"); + outf("if (exthblankon_ecs) {"); + outf("do_exthblankon_ecs();"); + outf("}"); } else { - if (aga && cmode != CMODE_DUALPF) { - if (spr) - outln ( " sprpix_val = pixdata.apixels[spix];"); - if (cmode != CMODE_HAM) - outln ( " spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val;"); - } else if (cmode != CMODE_HAM) { - outln ( " spix_val = pixdata.apixels[spix];"); - if (spr) - outln ( " sprpix_val = spix_val;"); - } - } -} - -static void out_linetoscr_do_dstpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) -{ - if (spr < 0) - return; - if (aga && cmode == CMODE_HAM) { - outln ( " spix_val = ham_linebuf[spix];"); - outln ( " dpix_val = CONVERT_RGB (spix_val);"); - } else if (cmode == CMODE_HAM) { - outln ( " spix_val = ham_linebuf[spix];"); - outln ( " dpix_val = p_xcolors[spix_val];"); - if (spr) - outln ( " sprpix_val = pixdata.apixels[spix];"); - } else if (aga && cmode == CMODE_DUALPF) { - outln ( " {"); - outln ( " uae_u8 val = lookup[spix_val];"); - outln ( " if (lookup_no[spix_val])"); - outln ( " val += dblpfofs[bpldualpf2of];"); - outln ( " val ^= xor_val;"); - outln ( " dpix_val = p_acolors[val];"); - outln ( " }"); - } else if (cmode == CMODE_DUALPF) { - outln ( " dpix_val = p_acolors[lookup[spix_val]];"); - } else if (aga && cmode == CMODE_EXTRAHB) { - outln ( " if (pixdata.apixels[spix] & 0x20) {"); - outln ( " unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F;"); - outln ( " dpix_val = CONVERT_RGB (c);"); - outln ( " } else"); - outln ( " dpix_val = p_acolors[spix_val];"); - } else if (cmode == CMODE_EXTRAHB) { - outln(" if (spix_val <= 31)"); - outln(" dpix_val = p_acolors[spix_val];"); - outln(" else"); - outln(" dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];"); - } else if (cmode == CMODE_EXTRAHB_ECS_KILLEHB) { - outln(" dpix_val = p_acolors[spix_val & 31];"); - } else - outln ( " dpix_val = p_acolors[spix_val];"); -} - -static void out_linetoscr_do_incspix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) -{ - if (spr < 0) { - outln(" spix++;"); - return; - } - if (hmode == HMODE_HALVE1F) { - outln ( " {"); - outln ( " uae_u32 tmp_val;"); - outln ( " spix++;"); - outln ( " tmp_val = dpix_val;"); - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - outlnf ( " dpix_val = merge_2pixel%d (dpix_val, tmp_val);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); - outln ( " spix++;"); - outln ( " }"); - } else if (hmode == HMODE_HALVE2F) { - outln ( " {"); - outln ( " uae_u32 tmp_val, tmp_val2, tmp_val3;"); - outln ( " spix++;"); - outln ( " tmp_val = dpix_val;"); - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - outln ( " spix++;"); - outln ( " tmp_val2 = dpix_val;"); - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - outln ( " spix++;"); - outln ( " tmp_val3 = dpix_val;"); - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - outlnf ( " tmp_val = merge_2pixel%d (tmp_val, tmp_val2);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); - outlnf ( " tmp_val2 = merge_2pixel%d (tmp_val3, dpix_val);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); - outlnf ( " dpix_val = merge_2pixel%d (tmp_val, tmp_val2);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); - outln ( " spix++;"); - outln ( " }"); - } else if (hmode == HMODE_HALVE1) { - outln ( " spix += 2;"); - } else if (hmode == HMODE_HALVE2) { - outln ( " spix += 4;"); + outf("if (cnt + %d == denise_hbstrt) {", add); + outf("do_hbstrt();"); + outf("}"); + outf("if (cnt + %d == denise_hbstop) {", add); + outf("do_hbstop();"); + outf("}"); + outf("if (cnt + %d == denise_phbstrt) {", add); + outf("do_phbstrt_aga();"); + outf("}"); + outf("if (cnt + %d == denise_phbstop) {", add); + outf("do_phbstop_aga();"); + outf("}"); + } +} + +static void gen_bplpixmode_ecs(int num) +{ + switch (modes) + { + default: + outf("dpix_val%d = denise_colors.acolors[pix%d];", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency(pix%d);", num, num); + } + break; + case CMODE_DUALPF: + outf("uae_u8 val%d = dpf_lookup[pix%d];", num, num); + outf("dpix_val%d = denise_colors.acolors[val%d];", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency(dpf_lookup[pix%d]);", num, num); + } + break; + case CMODE_EXTRAHB: + outf("pix%d &= bplehb_mask;", num); + outf("if (pix%d <= 31) {", num); + outf(" dpix_val%d = denise_colors.acolors[pix%d];", num, num); + outf("} else {"); + outf(" dpix_val%d = p_xcolors[(denise_colors.color_regs_ecs[pix%d - 32] >> 1) & 0x777];", num, num); + outf("}"); + if (genlock) { + outf("gpix%d = get_genlock_transparency(pix%d & 31);", num, num); + } + break; + case CMODE_HAM: + outf("dpix_val%d = decode_ham_pixel(pix%d);", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency(pix%d & 15);", num, num); + } + break; + } +} + +static void gen_bplpixmode_aga(int num) +{ + switch (modes) + { + default: + outf("dpix_val%d = denise_colors.acolors[pix%d ^ bplcon4_denise_xor_val];", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency(pix%d ^ bplcon4_denise_xor_val);", num, num); + } + break; + case CMODE_DUALPF: + outf("uae_u8 val%d = dpf_lookup[pix%d];", num, num); + outf("if (dpf_lookup_no[pix%d]) {", num); + outf(" val%d += dblpfofs[bpldualpf2of];", num); + outf("}"); + outf("val%d ^= bplcon4_denise_xor_val;", num); + outf("dpix_val%d = denise_colors.acolors[val%d];", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency(dpf_lookup[pix%d]);", num, num); + } + break; + case CMODE_EXTRAHB: + outf("pix%d ^= bplcon4_denise_xor_val;", num); + outf("if (!(pix%d & 0x20)) {", num); + outf(" dpix_val%d = denise_colors.acolors[pix%d];", num, num); + outf("} else {"); + outf(" uae_u32 v = (denise_colors.color_regs_aga[pix%d & 0x1f] >> 1) & 0x7f7f7f;", num); + outf(" dpix_val%d = CONVERT_RGB(v);", num); + outf("}"); + if (genlock) { + outf("gpix%d = get_genlock_transparency((pix%d ^ bplcon4_denise_xor_val) & 31);", num, num); + } + break; + case CMODE_HAM : + outf("dpix_val%d = decode_ham_pixel_aga(pix%d);", num, num); + if (genlock) { + if (planes == 8) { + outf("gpix%d = get_genlock_transparency((pix%d >> 2) & 63);", num, num); + } else { + outf("gpix%d = get_genlock_transparency(pix%d & 15);", num, num); + } + } + break; + case CMODE_EXTRAHB_ECS_KILLEHB: + outf("pix%d ^= bplcon4_denise_xor_val;", num); + outf("dpix_val%d = denise_colors.acolors[pix%d & 31];", num, num); + if (genlock) { + outf("gpix%d = get_genlock_transparency((pix%d ^ bplcon4_denise_xor_val) & 31);", num, num); + } + break; + } +} + +static void gen_getbpl(int num, int maxplanes) +{ + int p = planes < maxplanes ? planes : maxplanes; + if (bplfmode == 2) { + outf("loaded_pix = getbpl%d_64();", p); + } else if (bplfmode == 1) { + outf("loaded_pix = getbpl%d_32(); ", p); + } else if (aga) { + outf("loaded_pix = getbpl%d();", p); } else { - outln ( " spix++;"); + outf("pix%d = getbpl%d();", num, p); } } -static void put_dpixsprgenlock(int offset, int genlock, bool subpixel) +static void gen_shiftbpl(int maxplanes) { - if (!genlock) - return; - if (offset && subpixel) - outlnf(" genlock_buf[dpix + %d] = get_genlock_transparency(sprcol);\n", offset); - else if (offset && !subpixel) - outlnf(" genlock_buf[dpix + %d] = genlock_buf[dpix];\n", offset); - else - outlnf(" genlock_buf[dpix] = get_genlock_transparency(sprcol);"); + int p = planes < maxplanes ? planes : maxplanes; + if (bplfmode == 2) { + outf("shiftbpl%d_64();", p); + } else { + outf("shiftbpl%d();", p); + } } -static void put_dpixgenlock(int offset, CMODE_T cmode, int aga, int genlock, const char *var2) +static void gen_shiftbpl_hr(int maxplanes) { - if (!genlock) - return; - outindent(); - if (offset) { - outf(" genlock_buf[dpix + %d] = genlock_buf[dpix];\n", offset); + int p = planes < maxplanes ? planes : maxplanes; + int add; + if (outres > res) { + add = 4 >> (outres - res); } else { - outf(" genlock_buf[dpix] = get_genlock_transparency("); - if (cmode == CMODE_EXTRAHB) { - outf("%s", var2 ? var2 : "spix_val & 31"); + add = 4; + } + if (add == 4) { + if (bplfmode == 2) { + outf("shiftbpl%d_64();", p); + } else { + outf("shiftbpl%d();", p); } - else if (cmode == CMODE_DUALPF) { - outf("%s", var2 ? var2 : "lookup[spix_val]"); + } else if (oddeven) { + outf("bplshiftcnt[0] += %d;", add); + outf("if (bplshiftcnt[0] >= 4) {"); + outf("bplshiftcnt[0] = 0;"); + if (bplfmode == 2) { + outf("shiftbpl%de_64();", p); + } else { + outf("shiftbpl%de();", p); } - else if (cmode == CMODE_HAM) { - if (aga) { - outf("%s", var2 ? var2 : "(spix_val >> 2) & 63"); - } - else { - outf("%s", var2 ? var2 : "spix_val & 15"); - } + gen_getbpl(0, maxplanes); + outf("}"); + outf("bplshiftcnt[1] += %d;", add); + outf("if (bplshiftcnt[1] >= 4) {"); + outf("bplshiftcnt[1] = 0;"); + if (bplfmode == 2) { + outf("shiftbpl%do_64();", p); + } else { + outf("shiftbpl%do();", p); } - else { - outf("%s", var2 ? var2 : "spix_val"); + gen_getbpl(0, maxplanes); + outf("}"); + } else { + outf("bplshiftcnt[0] += %d;", add); + outf("if (bplshiftcnt[0] >= 4) {"); + outf("bplshiftcnt[0] = 0;"); + if (bplfmode == 2) { + outf("shiftbpl%d_64();", p); + } else { + outf("shiftbpl%d();", p); } - outf(");\n"); + gen_getbpl(0, maxplanes); + outf("}"); } } -static void put_dpix (const char *var) + +static void gen_shiftspr(int shift) { - outlnf(" buf[dpix++] = %s;", var); + if (aga) { + outf("denise_shift_sprites_aga(%d);", shift); + } else { + //outf("denise_shift_sprites(%d);", shift); + } } -static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int cnt, int spr, int genlock) +static void gen_ecsshresspr(void) { + outf("if (sv0 || sv1) {"); + outf("get_shres_spr_pix(sv0, sv1, &dpix_val0, &dpix_val2);"); + outf("if (sv0) {"); + outf("dpix_val1 = dpix_val0;"); + outf("}"); + outf("if (sv1) {"); + outf("dpix_val3 = dpix_val2;"); + outf("}"); + outf("}"); +} + +static void gen_sprpix(int i) +{ + // sprite pixel + outf("uae_u32 sv%d = 0;", i); + outf("if (denise_spr_nr_armeds) {"); + outf(" uae_u32 svt;"); if (aga) { - if (cnt == 1) { - outlnf ( " if (spritepixels[dpix].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf(" if (sprcol) {"); - outlnf ( " out_val = p_acolors[sprcol];"); - put_dpixsprgenlock(0, genlock, true); - outlnf(" }"); - outlnf(" }"); - put_dpix("out_val"); - } else if (cnt == 2) { - outlnf ( " {"); - outlnf ( " uae_u32 out_val1 = out_val;"); - outlnf ( " uae_u32 out_val2 = out_val;"); - outlnf(" if (spritepixels[dpix + 0].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val1 = p_acolors[sprcol];"); - put_dpixsprgenlock(0, genlock, true); - outlnf(" }"); - outlnf(" }"); - outlnf ( " if (spritepixels[dpix + 1].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val2 = p_acolors[sprcol];"); - put_dpixsprgenlock(1, genlock, true); - outlnf(" }"); - outlnf(" }"); - put_dpix("out_val1"); - put_dpix("out_val2"); - outlnf ( " }"); - } else if (cnt == 4) { - outlnf ( " {"); - outlnf ( " uae_u32 out_val1 = out_val;"); - outlnf ( " uae_u32 out_val2 = out_val;"); - outlnf ( " uae_u32 out_val3 = out_val;"); - outlnf ( " uae_u32 out_val4 = out_val;"); - outlnf(" if (spritepixels[dpix + 0].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val1 = p_acolors[sprcol];"); - put_dpixsprgenlock(0, genlock, true); - outlnf(" }"); - outlnf(" }"); - outlnf ( " if (spritepixels[dpix + 1].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val2 = p_acolors[sprcol];"); - put_dpixsprgenlock(1, genlock, true); - outlnf(" }"); - outlnf(" }"); - outlnf ( " if (spritepixels[dpix + 2].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 2, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val3 = p_acolors[sprcol];"); - put_dpixsprgenlock(2, genlock, true); - outlnf(" }"); - outlnf(" }"); - outlnf ( " if (spritepixels[dpix + 3].data) {"); - outlnf ( " sprcol = render_sprites (dpix + 3, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf ( " if (sprcol) {"); - outlnf ( " out_val4 = p_acolors[sprcol];"); - put_dpixsprgenlock(3, genlock, true); - outlnf(" }"); - outlnf(" }"); - put_dpix("out_val1"); - put_dpix("out_val2"); - put_dpix("out_val3"); - put_dpix("out_val4"); - outlnf ( " }"); + // outres > sprres ? 1 << (2 - (outres - sprres)) : 4 + outf(" svt = denise_render_sprites_aga(denise_spr_add);"); + } else if (ecsshres) { + outf(" svt = denise_render_sprites_ecs_shres();"); + } else { + outf(" svt = denise_render_sprites_lores();"); + } + outf(" if (!denise_sprite_blank_active && !sprites_hidden) {"); + outf(" sv%d = svt;", i); + outf(" }"); + //gen_shiftspr(i, j); + outf("}"); +} + +static void gen_storepix(int off, int off2) +{ + // ultra extreme debugging blanking raster + outf("#ifdef DEBUGGER"); + outf(" if (decode_specials_debug) {"); + outf(" dpix_val%d = decode_denise_specials_debug(dpix_val%d, cnt + %d);", off, off, off2); + outf(" }"); + outf("#endif"); + + outf(" *buf1++ = dpix_val%d;", off); + outf(" *buf2++ = dpix_val%d;", off); + if (genlock) { + outf(" *gbuf++ = gpix%d;", off); + } +} + +static void gen_prepix(int i) +{ + outf("uae_u8 pix%d = 0;", i); + if (genlock) { + outf("uae_u16 gpix%d = 0xffff;", i); + } + outf("uae_u32 dpix_val%d = 0;", i); +} + +static void gen_copybpl_lines(int oddeven) +{ + for (int i = 1; i <= 8; i++) { + if (planes >= i) { + if (oddeven == 0 || (oddeven == 1 && (i & 1)) || (oddeven == 2 && !(i & 1))) { + if (bplfmode == 2) { + outf("bplxdat3_64[%d] = bplxdat2_64[%d];", i - 1, i - 1); + } else { + outf("bplxdat3[%d] = bplxdat2[%d];", i - 1, i - 1); + } + } } + } + if (oddeven == 0 || oddeven == 1) { + outf("bpldat_copy[0] = false;"); + } + if (oddeven == 0 || oddeven == 2) { + outf("bpldat_copy[1] = false;"); + } +} + +static void gen_copybpl(void) +{ + if (oddeven) { + // bitplane shifter shifting + outf("if (bpldat_copy[0] && (denise_hcounter & %d) == bplcon1_shift[0]) { ", ((16 << bplfmode) >> res) - 1); + if (bplfmode == 2) { + outf("copybpl%de_64();", planes); + } else { + outf("copybpl%de();", planes); + } + outf("}"); + outf("if (bpldat_copy[1] && (denise_hcounter & %d) == bplcon1_shift[1]) {", ((16 << bplfmode) >> res) - 1); + if (bplfmode == 2) { + outf("copybpl%do_64();", planes); + } else { + outf("copybpl%do();", planes); + } + outf("}"); } else { - outlnf ( " if (spritepixels[dpix].data) {"); - outlnf ( " sprcol = render_sprites (dpix, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); - outlnf(" if (sprcol) {"); - outlnf ( " uae_u32 spcol = p_acolors[sprcol];"); - outlnf ( " out_val = spcol;"); - for (int i = 0; i < cnt; i++) { - put_dpixsprgenlock(i, genlock, false); - } - outlnf ( " }"); - outlnf ( " }"); - for (int i = 0; i < cnt; i++) { - put_dpix("out_val"); - } - } -} - - -static void out_linetoscr_mode (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, CMODE_T cmode, int genlock) -{ - int old_indent = set_indent (8); - - if (aga && cmode == CMODE_DUALPF) { - outln ( "int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;"); - outln ( "int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;"); - } else if (cmode == CMODE_DUALPF) - outln ( "int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;"); - - if (bpp == DEPTH_16BPP && hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && spr == 0) { - outln ( "int rem;"); - outln ( "if (((uintptr_t)&buf[dpix]) & 2) {"); - outln ( " uae_u32 spix_val;"); - outln ( " uae_u32 dpix_val;"); - - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); - - put_dpix("dpix_val"); - outln ( "}"); - outln ( "if (dpix >= dpix_end)"); - outln ( " return spix;"); - outln ( "rem = (((uintptr_t)&buf[dpix_end]) & 2);"); - outln ( "if (rem)"); - outln ( " dpix_end--;"); - } - - outln ( "while (dpix < dpix_end) {"); - if (spr) - outln ( " uae_u32 sprpix_val;"); - if (spr >= 0) { - outln ( " uae_u32 spix_val;"); - outln ( " uae_u32 dpix_val;"); - } - outln ( " uae_u32 out_val;"); - outln ( ""); - - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); - - if (spr >= 0) - outln ( " out_val = dpix_val;"); - else - outln ( " out_val = blank ? 0 : p_acolors[0];"); - - if (hmode == HMODE_DOUBLE) { - put_dpixgenlock(0, cmode, aga, genlock, NULL); - put_dpixgenlock(1, cmode, aga, genlock, NULL); - } else if (hmode == HMODE_DOUBLE2X) { - put_dpixgenlock(0, cmode, aga, genlock, NULL); - put_dpixgenlock(1, cmode, aga, genlock, NULL); - put_dpixgenlock(2, cmode, aga, genlock, NULL); - put_dpixgenlock(3, cmode, aga, genlock, NULL); + // bitplane shifter shifting + outf("if (bpldat_copy[0] && (denise_hcounter & %d) == bplcon1_shift[0]) { ", ((16 << bplfmode) >> res) - 1); + if (bplfmode == 2) { + outf("copybpl%d_64();", planes); + } else { + outf("copybpl%d();", planes); + } + outf("}"); + } +} + +static void gen_copybpl_hr(int add) +{ + int max; + if (outres > res) { + max = 1 << (outres - res); + } else { + max = 1; + } + if (oddeven) { + // bitplane shifter shifting + outf("if (bpldat_copy[0] && ((cnt | %d) & %d) == bplcon1_shift_full_masked[0]) { ", add, (((16 << bplfmode) >> res) << 2) - 1); + if (bplfmode == 2) { + outf("copybpl%de_64();", planes); + } else { + outf("copybpl%de();", planes); + } + if (max > 1) { + outf("bplshiftcnt[0] = 0;"); + gen_getbpl(0, maxplanes); + } + outf("}"); + outf("if (bpldat_copy[1] && ((cnt | %d) & %d) == bplcon1_shift_full_masked[1]) {", add, (((16 << bplfmode) >> res) << 2) - 1); + if (bplfmode == 2) { + outf("copybpl%do_64();", planes); + } else { + outf("copybpl%do();", planes); + } + if (max > 1) { + outf("bplshiftcnt[1] = 0;"); + gen_getbpl(0, maxplanes); + } + outf("}"); } else { - put_dpixgenlock(0, cmode, aga, genlock, NULL); + // bitplane shifter shifting + outf("if (bpldat_copy[0] && ((cnt | %d) & %d) == bplcon1_shift_full_masked[0]) { ", add, (((16 << bplfmode) >> res) << 2) - 1); + if (bplfmode == 2) { + outf("copybpl%d_64();", planes); + } else { + outf("copybpl%d();", planes); + } + if (max > 1) { + outf("bplshiftcnt[0] = 0;"); + gen_getbpl(0, maxplanes); + } + outf("}"); } + if (max == 1) { + gen_getbpl(0, maxplanes); + } +} - if (hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && bpp == DEPTH_16BPP && spr == 0) { - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); +static void gen_matchspr(int i) +{ + // sprite X comparisons + if (sprres >= 0) { + if (aga) { + outf("matchsprites_aga(cnt + %d);", i); + } else if (ecsshres) { + outf("matchsprites_ecs_shres(cnt + %d);", i); + } else { + outf("matchsprites(cnt + %d);", i); + } + } +} - if (do_bigendian) - outln ( " out_val = (out_val << 16) | (dpix_val & 0xFFFF);"); - else - outln ( " out_val = (out_val & 0xFFFF) | (dpix_val << 16);"); +static void gen_sprmerge(int off, int k, int dbl) +{ + outf("if (sv%d) {", k); + outf(" uae_u32 spix%d = denise_render_sprites2(pix%d, sv%d);", off, k, k); + outf(" if (spix%d) {", off); + outf(" dpix_val%d = denise_colors.acolors[spix%d];", off, off); + if (genlock) { + outf("gpix%d = get_genlock_transparency(spix%d);\n", off, off); } + for (int i = 0; i < dbl - 1; i++) { + outf(" dpix_val%d = dpix_val%d;", off + i + 1, off); + } + outf(" }"); + outf("}"); +} - if (hmode == HMODE_DOUBLE) { - if (bpp == DEPTH_8BPP) { - outln ( " *((uae_u16 *)&buf[dpix]) = (uae_u16) out_val;"); - outln ( " dpix += 2;"); - } else if (bpp == DEPTH_16BPP) { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 2, spr, genlock); - } else { - outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); - outln ( " dpix += 2;"); + +static void gen_pix_aga(void) +{ + int cnt = 0; + int off = 0; + for (int i = 0; i < (1 << outres); i++) { + if (!i) { + outf("if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue;"); + } + + gen_matchspr(off); + + // bitplane pixel + gen_prepix(off); + outf("if (!denise_blank_active) {"); + if (genlock) { + outf("gpix%d = get_genlock_transparency_border();", off); + } + outf(" dpix_val%d = bordercolor;", off); + outf(" if (denise_hdiw && bpl1dat_trigger) {"); + outf(" pix%d = loaded_pixs[%d];", off, off); + outf(" clxdat |= bplcoltable[pix%d];", off); + gen_bplpixmode_aga(off); + outf(" }"); + outf(" last_bpl_pix = pix%d;", off); + outf("}"); + gen_shiftbpl_hr(maxplanes); + gen_copybpl_hr(off); + + if (sprres >= 0) { + gen_sprpix(off); + if (sprres > outres) { + gen_shiftspr(sprres > outres + 1 ? 2 : 1); + } + } + + outf("loaded_pixs[%d] = loaded_pix;", off); + + if (res > outres) { + for (int i = 0; i < (1 << (res - outres)) - 1; i++) { + off++; + // HAM special case, all pixels must be processed. + if (modes == CMODE_HAM) { + gen_prepix(off); + outf("if (!denise_blank_active) {"); + outf(" dpix_val%d = bordercolor;", off); + outf(" if (denise_hdiw && bpl1dat_trigger) {"); + outf(" pix%d = loaded_pixs[%d];", off, off); + outf(" decode_ham_pixel_aga(pix%d);", off); + outf("}"); + outf(" last_bpl_pix = pix%d;", off); + outf("}"); + gen_shiftbpl_hr(maxplanes); + gen_copybpl_hr(off); + outf("loaded_pixs[%d] = loaded_pix;", off); + } else { + gen_shiftbpl(maxplanes); + } } + off++; } else { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 2, spr, genlock); - } else { - put_dpix("out_val"); - put_dpix("out_val"); + off += 4 / (1 << outres); + } + } + + outf("if (denise_pixtotal >= 0) {"); + + // bitplane/sprite merging + off = 0; + for (int i = 0; i < (1 << outres); i++) { + if (sprres >= 0) { + gen_sprmerge(off, off, 0); + } + + if (ntsc) { + outf("dtbuf[h][%d] = dpix_val%d;", off, off); + if (genlock) { + outf("dtgbuf[h][%d] = gpix%d;", off, off); } } - } else if (hmode == HMODE_DOUBLE2X) { - if (bpp == DEPTH_8BPP) { - outln ( " *((uae_u32 *)&buf[dpix]) = (uae_u32) out_val;"); - outln ( " dpix += 4;"); - } else if (bpp == DEPTH_16BPP) { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 4, spr, genlock); - } else { - outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); - outln ( " dpix += 2;"); - outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); - outln ( " dpix += 2;"); + + if (res > outres) { + for (int i = 0; i < (1 << (res - outres - 1)); i++) { + off++; } + off++; + } else { + off += 4 / (1 << outres); + } + } + + off = 0; + for (int i = 0; i < (1 << outres); i++) { + + // ultra extreme debugging blanking raster + if (ntsc) { + outf("uae_u32 t%d = dtbuf[h ^ lol][%d]; ", off, off); } else { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 4, spr, genlock); + outf("uae_u32 t%d = dpix_val%d; ", off, off); + } + outf("#ifdef DEBUGGER"); + outf(" if (decode_specials_debug) {"); + outf(" t%d = decode_denise_specials_debug(t%d, cnt + %d);", off, off, off); + outf(" }"); + outf("#endif"); + outf(" *buf1++ = t%d;", off); + outf(" *buf2++ = t%d;", off); + if (genlock) { + if (ntsc) { + outf(" *gbuf++ = dtgbuf[h ^ lol][%d];", off, off); } else { - put_dpix("out_val"); - put_dpix("out_val"); - put_dpix("out_val"); - put_dpix("out_val"); + outf(" *gbuf++ = gpix%d;", off, off); } } - } else { - if (bpp == DEPTH_16BPP) { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 1, spr, genlock); - } else { - outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); - outln ( " dpix += 2;"); + + //gen_storepix(off, off); + + if (res > outres) { + for (int i = 0; i < (1 << (res - outres - 1)); i++) { + off++; } + off++; } else { - if (spr) { - out_sprite(bpp, hmode, cmode, aga, 1, spr, genlock); - } else { - put_dpix("out_val"); + off += 4 / (1 << outres); + } + } + + outf("}"); + + outf("sprites_hidden = sprites_hidden2;"); +} + +static void gen_pix(void) +{ + int pixels = 1 << (outres > res ? outres : res); + int hmax = pixels / (1 << outres); + int bmax = pixels / (1 << res) - 1; + int smax, smax2; + + int cnt = 0; + int bcnt = bmax,hcnt = hmax; + int pixt[4] = { 0 }; + int sprt[4] = { 0 }; + int lastspr = 0; + + smax = 0; + smax2 = smax; + int scnt = 0; + + outf("if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue;"); + + gen_matchspr(0); + + int off2o = -1; + for (int i = 0; i < pixels; i++) { + int off2 = i * (4 / (1 << outres)); + if (off2 != off2o) { + hcnt = 0; + off2o = off2; + } + if (bcnt++ >= bmax) { + bcnt = 0; + // bitplane pixel + gen_prepix(i); + outf("if (!denise_blank_active) {"); + if (genlock) { + outf("gpix%d = get_genlock_transparency_border();", i); + } + outf(" dpix_val%d = bordercolor;", i); + outf(" if (denise_hdiw && bpl1dat_trigger) {"); + gen_getbpl(i, maxplanes); + outf(" clxdat |= bplcoltable[pix%d];", i); + if (planes > 4) { + outf(" if (decode_specials) {"); + outf(" pix%d = decode_denise_specials(pix%d);", i, i); + outf(" }"); + } + gen_bplpixmode_ecs(i); + outf(" }"); + outf(" last_bpl_pix = pix%d;", i); + outf("}"); + gen_shiftbpl(maxplanes); + pixt[i] = 1; + } + if (sprres >= 0) { + if (!scnt) { + scnt++; + gen_sprpix(i); + sprt[i] = 1; + lastspr = i; } } + int pix = pixels; + while (pix < (1 << res)) { + // shift skipped (display resolution < bitlane resolution) bitplane pixels + gen_shiftbpl(maxplanes); + pix++; + } + } + int pixcnt = 0; + for (int i = 0; i < pixels; i++) { + if (!pixt[i]) { + outf("uae_u32 dpix_val%d = dpix_val%d;", i, i - 1); + outf("uae_u8 pix%d = pix%d;", i, i - 1); + if (genlock) { + outf("uae_u16 gpix%d = gpix%d;", i, i - 1); + } + pixcnt++; + } } - outln ( "}"); + outf("if (denise_pixtotal >= 0) {"); + // bitplane/sprite merging + for (int i = 0; i < (1 << outres); i++) { + int off = i; + if (res > outres) { + off <<= (res - outres); + } + if (sprt[i]) { + gen_sprmerge(off, 0, outres == 0 ? 0 : (outres == 1 ? 2 : 4)); + } + if (ntsc) { + outf("dtbuf[h][%d] = dpix_val%d;", off, off); + if (genlock) { + outf("dtgbuf[h][%d] = gpix%d;", off, off); + } + } + } + int j = 0, k = 0, jj = 0; + for (int i = 0; i < (1 << outres); i++) { + int off = i; + if (res > outres) { + off <<= (res - outres); + } + int off2 = i * (4 / (1 << outres)); - if (bpp == DEPTH_16BPP && hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && spr == 0) { - outln ( "if (rem) {"); - outln ( " uae_u32 spix_val;"); - outln ( " uae_u32 dpix_val;"); + //gen_storepix(off, off2); - out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); - out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); + // ultra extreme debugging blanking raster + outf("uae_u32 t%d = 0;", off); + outf("if (!extblank) {"); + if (ntsc) { + outf("t%d = dtbuf[h ^ lol][%d]; ", off, off); + } else { + outf("t%d = dpix_val%d; ", off, off); + } + outf("}"); + outf("#ifdef DEBUGGER"); + outf(" if (decode_specials_debug) {"); + outf(" t%d = decode_denise_specials_debug(t%d, cnt + %d);", off, off, off2); + outf(" }"); + outf("#endif"); + + outf(" *buf1++ = t%d;", off); + outf(" *buf2++ = t%d;", off); + if (genlock) { + if (ntsc) { + outf(" *gbuf++ = dtgbuf[h ^ lol][%d];", off, off); + } else { + outf(" *gbuf++ = gpix%d;", off, off); + } + } - put_dpix("dpix_val"); - outln ( "}"); } + outf("}"); - set_indent (old_indent); + gen_copybpl(); - return; + outf("sprites_hidden = sprites_hidden2;"); } -static void out_linetoscr (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, int genlock) +static void gen_init(void) { - if (aga) - outln ("#ifdef AGA"); - - out_linetoscr_decl (bpp, hmode, aga, spr, genlock); - outln ( "{"); - - outlnf ( " %s *buf = (%s *) xlinebuffer;", get_depth_type_str (bpp), get_depth_type_str (bpp)); - if (genlock) - outlnf(" uae_u8 *genlock_buf = xlinebuffer_genlock;"); - if (spr) - outln ( " uae_u8 sprcol;"); - if (aga && spr >= 0) { - outln(" uae_u8 xor_val = bplxor;"); - outln(" uae_u8 and_val = bpland;"); + if (aga) { + outf("int cnt = denise_hcounter << 2;"); + outf("int cnt_next = denise_hcounter_next << 2;"); + } else { + outf("int cnt = denise_hcounter << 2;"); } - outln ( ""); +} + +static bool gen_head(void) +{ + char funcname[200]; + sprintf(funcname, "lts_%s_%s_%s%d_p%d_i%s_d%s%s%s%s", + aga ? "aga" : "ecs", + bplfmode == 0 ? "fm0" : (bplfmode == 1 ? "fm1" : "fm2"), + modes == 0 ? "n" : (modes == 1 ? "dpf" : (modes == 2 ? "ehb" : (modes == 4 ? "kehb" : "ham"))), + oddeven ? 1 : 0, + planes, + res == 0 ? "lores" : (res == 1 ? "hires" : "shres"), + outres == 0 ? "lores" : (outres == 1 ? "hires" : "shres"), + sprres < 0 ? "" : "_spr", + ntsc > 0 ? "_ntsc" : "", + genlock ? "_genlock" : ""); + strcpy(funcnamep, funcname); + funcnamep += strlen(funcnamep) + 1; + *funcnamep = 0; + outf("static void %s(void)", funcname); + outf("{"); - if (spr >= 0) { - outln(" switch(bplmode)"); - outln(" {"); - outln(" case CMODE_NORMAL:"); - outln(" {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_NORMAL, genlock); - outln(" }"); - outln(" break;"); - outln(" case CMODE_HAM:"); - outln(" {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_HAM, genlock); - outln(" }"); - outln(" break;"); - outln(" case CMODE_DUALPF:"); - outln(" {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_DUALPF, genlock); - outln(" }"); - outln(" break;"); - outln(" case CMODE_EXTRAHB:"); - outln(" {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_EXTRAHB, genlock); - outln(" }"); - outln(" break;"); - if (!aga) { - // ECS Denise with KILLEHB set - outln(" case CMODE_EXTRAHB_ECS_KILLEHB:"); - outln(" {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_EXTRAHB_ECS_KILLEHB, genlock); - outln(" }"); - outln(" break;"); + // skip non-existing modes + if (!aga) { + if (planes > 4 && res > 0) { + return false; + } + if (planes > 6) { + return false; + } + if (modes == CMODE_HAM && (res > 0 || planes <= 4)) { + return false; + } + if (planes != 6 && modes == CMODE_EXTRAHB) { + return false; } } else { - outln ( " if (1) {"); - out_linetoscr_mode(bpp, hmode, aga, spr, CMODE_NORMAL, genlock); + if (modes == CMODE_HAM && (planes != 6 && planes != 8)) { + return false; + } + if (planes != 6 && (modes == CMODE_EXTRAHB || modes == CMODE_EXTRAHB_ECS_KILLEHB)) { + return false; + } + // FMODE=1: Superhires max 4 planes + if (bplfmode == 1 && planes > 4 && res > 1) { + return false; + } + // FMODE=0: Hires max 4 planes. + if (bplfmode == 0 && planes > 4 && res > 0) { + return false; + } + // FMODE=0: Superhires max 2 planes. + if (bplfmode == 0 && planes > 2 && res > 1) { + return false; + } } + return true; +} - outln ( " }\n"); - outln ( " return spix;"); - outln ( "}"); +static void gen_null(void) +{ + outf("lts_null();"); +} - if (aga) - outln ( "#endif"); - outln ( ""); +static void gen_start(void) +{ + outf(" while (denise_cck < denise_total) {"); + outf(" do_denise_cck(denise_linecnt, denise_startpos, denise_cck);"); + outf(" if (lts_changed) return;"); + outf(" for (int h = 0; h < 2; h++) {"); + outf(" if (h) {"); + outf(" denise_hcounter_next = denise_hcounter_new;"); + outf(" }"); + +} +static void gen_end(void) +{ + outf("#ifdef DEBUGGER"); + outf(" *debug_dma_dhpos_odd = denise_hcounter;"); + outf("#endif"); + outf(" denise_hcounter++;"); + outf(" denise_hcounter &= 511;"); + outf(" denise_hcounter_next++;"); + outf(" denise_hcounter_next &= 511;"); + outf(" }"); + outf(" denise_pixtotal--;"); + outf(" denise_hcounter = denise_hcounter_new;"); + outf(" denise_cck++;"); + outf(" }"); +} + +static void gen_tail(void) +{ + outf("}"); +} + +static void helperfunctions(void) +{ + char *oddeven[] = { "", "e", "o" }; + + for (int fmode = 0; fmode < 2; fmode++) { + for (int i = 1; i <= 8; i++) { + for (int oe = 0; oe < 3; oe++) { + outf("STATIC_INLINE void shiftbpl%d%s%s(void)", i, oddeven[oe], fmode ? "_64" : ""); + outf("{"); + for (int j = oe == 2 ? 1 : 0; j < i; j += (oe == 0) ? 1 : 2) { + if (fmode) { + outf("bplxdat3_64[%d] <<= 1;", j); + } else { + outf("bplxdat3[%d] <<= 1;", j); + } + } + outf("}"); + } + } + } + for (int fmode = 0; fmode < 3; fmode++) { + for (int i = 1; i <= 8; i++) { + outf("STATIC_INLINE uae_u8 getbpl%d%s(void)", i, fmode == 1 ? "_32" : (fmode == 2 ? "_64" : "")); + outf("{"); + outf(" uae_u8 v = 0;"); + for (int j = 0; j < i; j++) { + if (fmode == 0) { + outf("v |= ((bplxdat3[%d] >> 15) & 1) << %d;", j, j); + } else if (fmode == 1) { + outf("v |= ((bplxdat3[%d] >> 31) & 1) << %d;", j, j); + } else { + outf("v |= ((bplxdat3_64[%d] >> 63) & 1) << %d;", j, j); + } + } + outf(" return v;"); + outf("}"); + } + } + for (int fmode = 0; fmode < 2; fmode++) { + for (int k = 0; k < 3; k++) { + for (int i = 1; i <= 8; i++) { + outf("STATIC_INLINE void copybpl%d%s%s(void)", i, k == 0 ? "" : (k == 1 ? "e" : "o"), fmode ? "_64" : ""); + outf("{"); + int start = k <= 1 ? 0 : 1; + int step = k >= 1 ? 2 : 1; + for (int j = start; j < i; j += step) { + outf(" if (denise_planes >= %d) {", j + 1); + if (fmode) { + outf(" bplxdat3_64[%d] = bplxdat2_64[%d];", j, j); + } else { + outf(" bplxdat3[%d] = bplxdat2[%d];", j, j); + } + outf(" }"); + } + if (k > 0) { + outf(" bpldat_copy[%d] = false;", k - 1); + } else { + outf(" bpldat_copy[0] = false;"); + outf(" bpldat_copy[1] = false;"); + } + outf("}"); + } + } + } } int main (int argc, char *argv[]) { - DEPTH_T bpp; - int aga, spr; - HMODE_T hmode; - - do_bigendian = 0; - - for (int i = 1; i < argc; i++) { - if (argv[i][0] != '-') - continue; - if (argv[i][1] == 'b' && argv[i][2] == '\0') - do_bigendian = 1; - } - - set_outfile (stdout); - - outln ("/*"); - outln (" * UAE - The portable Amiga emulator."); - outln (" *"); - outln (" * This file was generated by genlinetoscr. Don't edit."); - outln (" */"); - outln (""); - - for (bpp = DEPTH_16BPP; bpp <= DEPTH_MAX; bpp++) { - for (aga = 0; aga <= 1 ; aga++) { - if (aga && bpp == DEPTH_8BPP) - continue; - for (spr = -1; spr <= 1; spr++) { - if (!aga && spr < 0) - continue; - for (hmode = HMODE_NORMAL; hmode <= HMODE_MAX; hmode++) { - out_linetoscr(bpp, hmode, aga, spr, 0); - if (spr >= 0) - out_linetoscr(bpp, hmode, aga, spr, 1); + set_outfile("../../linetoscr_common.cpp"); + + helperfunctions(); + + // AGA + + funcnamep = funcnames; + *funcnamep = 0; + aga = 1; + oddeven = 1; + genlock = 0; + ntsc = -1; + + for (bplfmode = 0; bplfmode < 3; bplfmode++) { + + char tmp[100]; + sprintf(tmp, "../../linetoscr_aga_fm%d.cpp", bplfmode); + set_outfile(tmp); + + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 3; res++) { + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (planes = 2; planes <= 8; planes += 2) { + for (modes = 0; modes < 5; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix_aga(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } + } + } + } + } + } + + outf("static LINETOSRC_FUNC linetoscr_aga_funcs[] = {"); + char *p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + funcnamep = funcnames; + *funcnamep = 0; + genlock = 1; + + for (bplfmode = 0; bplfmode < 3; bplfmode++) { + + char tmp[100]; + sprintf(tmp, "../../linetoscr_aga_fm%d_genlock.cpp", bplfmode); + set_outfile(tmp); + + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 3; res++) { + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (planes = 4; planes <= 8; planes += 4) { + for (modes = 0; modes < 5; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix_aga(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } + } + } + } + } + } + + outf("static LINETOSRC_FUNC linetoscr_aga_genlock_funcs[] = {"); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + + // OCS/ECS + set_outfile("../../linetoscr_ocs_ecs.cpp"); + + funcnamep = funcnames; + *funcnamep = 0; + aga = 0; + bplfmode = 0; + genlock = 0; + ntsc = 0; + + const int planecnts[] = { 2, 4, 5, 6, 0 }; + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 2; res++) { + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (int pc = 0; planecnts[pc]; pc++) { + planes = planecnts[pc]; + for (modes = 0; modes < 4; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } + } + } + } + } + + outf("static LINETOSRC_FUNC linetoscr_ecs_funcs[] = {"); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + // OCS/ECS genlock + set_outfile("../../linetoscr_ocs_ecs_genlock.cpp"); + + funcnamep = funcnames; + *funcnamep = 0; + genlock = 1; + + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 2; res++) { + if (res > 0) { + planes = 4; + } else { + planes = 6; + } + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (modes = 0; modes < 4; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } + } + } + } + + outf("static LINETOSRC_FUNC linetoscr_ecs_genlock_funcs[] = {"); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + + + + // OCS/ECS NTSC + set_outfile("../../linetoscr_ocs_ecs_ntsc.cpp"); + + funcnamep = funcnames; + *funcnamep = 0; + aga = 0; + bplfmode = 0; + genlock = 0; + ntsc = 1; + + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 2; res++) { + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (int pc = 0; planecnts[pc]; pc++) { + planes = planecnts[pc]; + for (modes = 0; modes < 4; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } } } } } + + outf("static LINETOSRC_FUNC linetoscr_ecs_ntsc_funcs[] = {"); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + // OCS/ECS genlock NTSC + set_outfile("../../linetoscr_ocs_ecs_ntsc_genlock.cpp"); + + funcnamep = funcnames; + *funcnamep = 0; + genlock = 1; + + for (outres = 0; outres < 3; outres++) { + for (res = 0; res < 2; res++) { + if (res > 0) { + planes = 4; + } else { + planes = 6; + } + for (int spr = 0; spr < 2; spr++) { + sprres = spr == 0 ? -1 : 0; + for (modes = 0; modes < 4; modes++) { + for (oddeven = 0; oddeven < 2; oddeven++) { + if (gen_head()) { + gen_start(); + gen_init(); + gen_pix(); + gen_end(); + } else { + gen_null(); + } + gen_tail(); + } + } + } + } + } + + outf("static LINETOSRC_FUNC linetoscr_ecs_ntsc_genlock_funcs[] = {"); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + + // ECS SuperHires + set_outfile("../../linetoscr_ecs_shres.cpp"); + + funcnamep = funcnames; + *funcnamep = 0; + planes = 2; + res = 2; + modes = 0; + oddeven = 0; + ecsshres = 1; + ntsc = -1; + + for (genlock = 0; genlock < 2; genlock++) { + for (outres = 0; outres < 3; outres++) { + char funcname[200]; + sprintf(funcname, "lts_ecs_shres_d%s%s", + outres == 0 ? "lores" : (outres == 1 ? "hires" : "shres"), + genlock ? "_genlock" : ""); + strcpy(funcnamep, funcname); + funcnamep += strlen(funcnamep) + 1; + *funcnamep = 0; + outf("static void %s(void)", funcname); + outf("{"); + gen_start(); + gen_init(); + gen_prepix(0); + gen_prepix(1); + gen_prepix(2); + gen_prepix(3); + outf("bool shifted = false;"); + outf("checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h);"); + outf("if (!denise_blank_active) {"); + outf(" dpix_val0 = bordercolor_ecs_shres;"); + outf(" dpix_val1 = bordercolor_ecs_shres;"); + outf(" dpix_val2 = bordercolor_ecs_shres;"); + outf(" dpix_val3 = bordercolor_ecs_shres;"); + outf(" if (denise_hdiw && bpl1dat_trigger) {"); + outf(" shifted = true;"); + outf("pix0 = getbpl2();"); + outf("shiftbpl2();"); + outf("pix1 = getbpl2();"); + outf("shiftbpl2();"); + outf("pix2 = getbpl2();"); + outf("shiftbpl2();"); + outf("pix3 = getbpl2();"); + outf("shiftbpl2();"); + if (genlock) { + outf("get_shres_pix_genlock(pix0, pix1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);"); + outf("get_shres_pix_genlock(pix2, pix3, &dpix_val2, &dpix_val3, &gpix2, &gpix3);"); + } else { + outf("get_shres_pix(pix0, pix1, &dpix_val0, &dpix_val1);"); + outf("get_shres_pix(pix2, pix3, &dpix_val2, &dpix_val3);"); + } + outf("}"); + outf("}"); + if (outres == 1) { + gen_sprpix(0); + gen_matchspr(0); + gen_sprpix(1); + gen_matchspr(2); + gen_ecsshresspr(); + outf("if (denise_pixtotal >= 0) {"); + gen_storepix(0, 0); + gen_storepix(2, 2); + outf("}"); + } else if (outres == 2) { + gen_sprpix(0); + gen_matchspr(0); + gen_sprpix(1); + gen_matchspr(2); + gen_ecsshresspr(); + outf("if (denise_pixtotal >= 0) {"); + gen_storepix(0, 0); + gen_storepix(1, 1); + gen_storepix(2, 2); + gen_storepix(3, 3); + outf("}"); + } + outf("if (!shifted) {"); + outf("shiftbpl2();"); + outf("shiftbpl2();"); + outf("shiftbpl2();"); + outf("shiftbpl2();"); + outf("}"); + gen_copybpl(); + gen_end(); + gen_tail(); + } + + outf("static LINETOSRC_FUNC linetoscr_ecs_shres_%sfuncs[] = {", genlock ? "genlock_" : ""); + p = funcnames; + while (*p) { + outf("%s,", p); + p += strlen(p) + 1; + } + outf("};"); + } + + closefile(); + return 0; } diff --git a/include/audio.h b/include/audio.h index 8e835445..c893652c 100644 --- a/include/audio.h +++ b/include/audio.h @@ -24,7 +24,8 @@ void AUDxLEN (int nr, uae_u16 value); uae_u16 audio_dmal (void); void audio_state_machine (void); -uaecptr audio_getpt (int nr, bool reset); +uaecptr *audio_getpt(int nr); +uaecptr audio_getloadpt(int nr); int init_audio (void); void audio_reset (void); void update_audio (void); @@ -97,11 +98,11 @@ static inline int get_audio_stereomode (int channels) case 2: return SND_STEREO; case 4: - return SND_4CH; + return SND_4CH_CLONEDSTEREO; case 6: - return SND_6CH; + return SND_6CH_CLONEDSTEREO; case 8: - return SND_8CH; + return SND_8CH_CLONEDSTEREO; } return SND_STEREO; } diff --git a/include/blitter.h b/include/blitter.h index a0ed3f48..f99285b1 100644 --- a/include/blitter.h +++ b/include/blitter.h @@ -15,43 +15,46 @@ struct bltinfo { int blitzero; uae_u16 bltadat, bltbdat, bltcdat, bltddat; uae_u16 bltaold, bltahold, bltbold, bltbhold, bltafwm, bltalwm; + uae_u16 bltahold2, bltbhold2, bltchold2; int vblitsize, hblitsize; - int bltamod, bltbmod, bltcmod, bltdmod; + uae_s16 bltamod, bltbmod, bltcmod, bltdmod; + uae_s16 bltamod_next, bltbmod_next, bltcmod_next, bltdmod_next; + uae_u32 bltapt, bltbpt, bltcpt, bltdpt; + uae_u32 bltapt_prev, bltbpt_prev, bltcpt_prev, bltdpt_prev; + uae_u16 bltsize; + uae_u16 bltcon0, bltcon1; int got_cycle; - int nasty_cnt, wait_nasty; + uae_u32 nasty_cnt, wait_nasty; int blitter_nasty, blit_interrupt; - // blitter is active and D may write to visible bitplane addresses - int blitter_dangerous_bpl; - int blit_main, blit_finald, blit_pending; + int blit_main, blit_pending, blit_count_done; int blit_queued; - int finishhpos; + evt_t finishcycle_dmacon, finishcycle_copper; + evt_t blt_ch_cycles[4]; + evt_t blt_mod_cycles[4], blt_change_cycles; + uae_u16 bltddatl; + uae_u32 bltdptl; }; extern struct bltinfo blt_info; -extern void check_is_blit_dangerous(uaecptr *bplpt, int planes, int words); +extern bool blitter_delayed_update; -extern uae_u16 bltsize; -extern uae_u16 bltcon0, bltcon1; -extern uae_u32 bltapt, bltbpt, bltcpt, bltdpt; -extern uae_u32 bltptx; -extern int bltptxpos, bltptxc; - -extern void maybe_blit(int, int); +extern void maybe_blit(int); extern void reset_blit(int); extern int blitnasty(void); extern void blitter_handler(uae_u32); extern void build_blitfilltable(void); -extern void do_blitter(int, int, uaecptr); +extern void do_blitter(int, uaecptr); extern void decide_blitter(int hpos); -extern bool decide_blitter_maybe_write(int hpos, uaecptr addr, uae_u32 v); -extern void blitter_done_notify(int); +extern void blitter_done_notify(void); extern void blitter_slowdown(int, int, int, int); extern void blitter_check_start(void); extern void blitter_reset(void); extern void blitter_debugdump(void); extern void restore_blitter_start(void); -extern void set_blitter_last(int); + +void blitter_loadbdat(uae_u16 v); +void blitter_loadcdat(uae_u16 v); typedef void blitter_func(uaecptr, uaecptr, uaecptr, uaecptr, struct bltinfo *); diff --git a/include/cia.h b/include/cia.h index 753e4582..dd9c55f4 100644 --- a/include/cia.h +++ b/include/cia.h @@ -11,7 +11,7 @@ #include "uae/types.h" -extern void CIA_reset(void); +extern void CIA_reset(int); extern void CIA_vsync_prehandler(void); extern void CIA_hsync_prehandler(void); extern void CIA_hsync_posthandler(bool, bool); diff --git a/include/cpuboard.h b/include/cpuboard.h index 5b7787e3..c422a07c 100644 --- a/include/cpuboard.h +++ b/include/cpuboard.h @@ -35,7 +35,6 @@ uae_u8 *REGPARAM3 cyberstorm_scsi_ram_xlate(uaecptr addr) REGPARAM; void cyberstorm_mk3_ppc_irq(int id, int level); void blizzardppc_irq(int id, int level); void cyberstorm_mk3_ppc_irq_setonly(int id, int level); -void blizzardppc_irq_setonly(int id, int level); void cpuboard_gvpmaprom(int); #define BOARD_MEMORY_Z2 1 diff --git a/include/custom.h b/include/custom.h index 8651a6f3..d1d15120 100644 --- a/include/custom.h +++ b/include/custom.h @@ -28,16 +28,19 @@ #define BEAMCON0_VSYTRUE 0x0002 #define BEAMCON0_HSYTRUE 0x0001 -extern bool aga_mode, ecs_agnus, ecs_denise; +extern bool aga_mode, ecs_agnus, ecs_denise, ecs_denise_only; extern bool agnusa1000, denisea1000_noehb, denisea1000; extern bool direct_rgb; /* These are the masks that are ORed together in the chipset_mask option. * If CSMASK_AGA is set, the ECS bits are guaranteed to be set as well. */ +#define CSMASK_OCS 0 #define CSMASK_ECS_AGNUS 1 #define CSMASK_ECS_DENISE 2 #define CSMASK_AGA 4 -#define CSMASK_MASK (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA) +#define CSMASK_A1000_NOEHB 0x10 +#define CSMASK_A1000 0x20 +#define CSMASK_MASK (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA | CSMASK_A1000) #define CHIPSET_CLOCK_PAL 3546895 #define CHIPSET_CLOCK_NTSC 3579545 @@ -46,8 +49,6 @@ extern bool direct_rgb; #define MAXVPOS_LINES_ECS 2048 #define MAXVPOS_LINES_OCS 512 -#define BLIT_NASTY_CPU_STEAL_CYCLE_COUNT 3 - uae_u32 get_copper_address(int copno); extern int custom_init(void); @@ -62,7 +63,7 @@ extern void do_copper(void); extern void notice_new_xcolors(void); extern void notice_screen_contents_lost(int monid); extern void init_row_map(void); -extern void init_hz_normal(void); +extern void init_hz(void); extern void init_custom(void); extern void set_picasso_hack_rate(int hz); @@ -75,7 +76,9 @@ extern uae_u32 hsync_counter, vsync_counter; extern uae_u16 dmacon; extern uae_u16 intena, intreq, intreqr; -extern int vpos, lof_store, lof_display; +extern int vpos, linear_vpos; +extern uae_u8 agnus_hpos; +extern bool lof_store, lof_display; extern int scandoubled_line; extern int n_frames; @@ -133,12 +136,11 @@ extern int maxhpos, maxhposm0, maxhpos_short; extern int maxvpos, maxvpos_nom, maxvpos_display, maxvpos_display_vsync, maxhpos_display; extern int maxvsize_display; extern int hsyncstartpos_hw, hsyncendpos_hw; -extern int minfirstline, minfirstline_linear, vblank_endline, numscrlines; +extern int minfirstline, minfirstline_linear, vblank_endline, numscrlines, minfirstline_linear; extern float vblank_hz, fake_vblank_hz; extern float hblank_hz; extern int vblank_skip, doublescan; extern int programmedmode; -extern int vblank_firstline_hw; extern int display_reset; #define DMA_AUD0 0x0001 @@ -153,16 +155,17 @@ extern int display_reset; #define DMA_MASTER 0x0200 #define DMA_BLITPRI 0x0400 -#define CYCLE_BITPLANE 1 -#define CYCLE_REFRESH 2 -#define CYCLE_STROBE 3 -#define CYCLE_MISC 4 -#define CYCLE_SPRITE 5 -#define CYCLE_COPPER 6 -#define CYCLE_BLITTER 7 -#define CYCLE_CPU 8 - -#define CYCLE_MASK 0x0f +#define CYCLE_BITPLANE (1 << 0) +#define CYCLE_REFRESH (1 << 1) +#define CYCLE_STROBE (1 << 2) +#define CYCLE_DISK (1 << 3) +#define CYCLE_AUDIO (1 << 4) +#define CYCLE_SPRITE (1 << 5) +#define CYCLE_COPPER (1 << 6) +#define CYCLE_UHRESBPL (1 << 7) +#define CYCLE_UHRESSPR (1 << 8) +#define CYCLE_BLITTER (1 << 9) +#define CYCLE_CPU (1 << 10) extern uae_u32 timeframes; extern evt_t frametime; @@ -178,12 +181,6 @@ extern uae_u16 bemcon0_hsync_mask, bemcon0_vsync_mask; #define MAX_WORDS_PER_LINE 112 #endif -extern uae_u32 hirestab_h[256][2]; -extern uae_u32 lorestab_h[256][4]; - -extern uae_u32 hirestab_l[256][1]; -extern uae_u32 lorestab_l[256][2]; - #ifdef AGA /* AGA mode color lookup tables */ extern unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256]; @@ -236,35 +233,19 @@ extern frame_time_t idletime; extern int lightpen_x[2], lightpen_y[2]; extern int lightpen_cx[2], lightpen_cy[2], lightpen_active, lightpen_enabled, lightpen_enabled2; -struct customhack { - uae_u16 v; - int vpos, hpos; -}; -extern void alloc_cycle_ext(int, int); -extern bool alloc_cycle_blitter(int hpos, uaecptr *ptr, int, int); -extern uaecptr alloc_cycle_blitter_conflict_or(int, int, bool*); extern bool ispal(int *lines); extern bool isvga(void); extern int current_maxvpos(void); extern struct chipset_refresh *get_chipset_refresh(struct uae_prefs*); extern void compute_framesync(void); extern void getsyncregisters(uae_u16 *phsstrt, uae_u16 *phsstop, uae_u16 *pvsstrt, uae_u16 *pvsstop); -bool blitter_cant_access(int hpos); +bool blitter_cant_access(void); void custom_cpuchange(void); -bool bitplane_dma_access(int hpos, int offset); void custom_dumpstate(int); bool get_ras_cas(uaecptr, int*, int*); void get_mode_blanking_limits(int *phbstop, int *phbstrt, int *pvbstop, int *pvbstrt); -#define RGA_PIPELINE_ADJUST 4 -#define MAX_CHIPSETSLOTS 256 -#define MAX_CHIPSETSLOTS_EXTRA 12 -extern uae_u8 cycle_line_slot[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; -extern uae_u16 cycle_line_pipe[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; -extern uae_u16 blitter_pipe[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSETSLOTS_EXTRA]; - -#define CYCLE_PIPE_CPUSTEAL 0x8000 -#define CYCLE_PIPE_NONE 0x4000 +#define CYCLE_PIPE_CPUFREE 0x4000 #define CYCLE_PIPE_BLITTER 0x100 #define CYCLE_PIPE_COPPER 0x80 #define CYCLE_PIPE_SPRITE 0x40 @@ -275,13 +256,6 @@ extern uae_u16 blitter_pipe[MAX_CHIPSETSLOTS + RGA_PIPELINE_ADJUST + MAX_CHIPSET #define RGA_PIPELINE_OFFSET_BLITTER 1 -extern int rga_pipeline_blitter; - -STATIC_INLINE int get_rga_pipeline(int hpos, int off) -{ - return (hpos + off) % maxhposm0; -} - struct custom_store { uae_u16 value; @@ -289,4 +263,68 @@ struct custom_store }; extern struct custom_store custom_storage[256]; +#define DENISE_RGA_FLAG_SYNC 0x01 +#define DENISE_RGA_FLAG_CSYNC 0x02 +#define DENISE_RGA_FLAG_VSYNC 0x04 +#define DENISE_RGA_FLAG_HSYNC 0x08 +#define DENISE_RGA_FLAG_BLANKEN_CSYNC 0x10 +#define DENISE_RGA_FLAG_BLANKEN_CSYNC_ON 0x20 +#define DENISE_RGA_FLAG_LOL 0x40 +#define DENISE_RGA_FLAG_LOL_ON 0x80 + +#define DENISE_RGA_FLAG_NEXTLAST_VB 0x10 + +struct denise_rga +{ + uae_u64 v64; + uae_u32 v; + uae_u16 rga; + uae_u32 line; + uae_u32 flags; + uaecptr pt; +#ifdef DEBUGGER + struct dma_rec *dr; +#endif +}; + +#define DENISE_RGA_SLOT_TOTAL 512 +extern struct denise_rga rga_denise[DENISE_RGA_SLOT_TOTAL]; + +struct denise_fastsprite +{ + uae_u64 data64[2]; + uae_u32 data[2]; + uae_u16 pos, ctl; + bool active; +}; + +struct rgabuf { + uae_u32 *p; + uae_u32 pv; + uae_u16 reg; + uae_u16 value; + uae_u32 type; + uae_u32 mwmask; + int alloc; + bool write; + uae_u32 *conflict; + uaecptr conflictaddr; + uae_u32 bpldat, sprdat, bltdat, auddat, refdat, dskdat, copdat; + uae_s16 bplmod, bltmod, bltadd; +}; + +#define RGA_SLOT_BPL 0 +#define RGA_SLOT_IN 1 +#define RGA_SLOT_OUT 2 +#define RGA_SLOT_TOTAL 3 + +bool check_rga(int slot); +bool check_rga_free_slot_in(void); +struct rgabuf *read_rga(int slot); +struct rgabuf *write_rga(int slot, int type, uae_u16 v, uae_u32 *p); +extern uae_u16 clxdat; + +extern int current_linear_vpos, current_linear_hpos; +extern uae_u8 agnus_hpos; + #endif /* UAE_CUSTOM_H */ diff --git a/include/debug.h b/include/debug.h index ccf35574..6c66eec0 100644 --- a/include/debug.h +++ b/include/debug.h @@ -29,7 +29,7 @@ extern int memwatch_enabled; extern int exception_debugging; extern int debug_copper; extern int debug_dma, debug_heatmap; -extern int debug_sprite_mask; +extern uae_u32 debug_sprite_mask; extern int debug_bpl_mask, debug_bpl_mask_one; extern int debugger_active; extern int debug_illegal; @@ -185,10 +185,10 @@ extern struct memwatch_node mwnodes[MEMWATCH_TOTAL]; extern void memwatch_dump2 (TCHAR *buf, int bufsize, int num); -void debug_getpeekdma_chipram(uaecptr addr, uae_u32 mask, int reg, int ptrreg); +void debug_getpeekdma_chipram(uaecptr addr, uae_u32 mask, int reg); void debug_getpeekdma_value(uae_u32); void debug_getpeekdma_value_long(uae_u32, int); -uae_u32 debug_putpeekdma_chipram(uaecptr addr, uae_u32 v, uae_u32 mask, int reg, int ptrreg); +uae_u32 debug_putpeekdma_chipram(uaecptr addr, uae_u32 v, uae_u32 mask, int reg); uae_u32 debug_putpeekdma_chipset(uaecptr addr, uae_u32 v, uae_u32 mask, int reg); void debug_lgetpeek(uaecptr addr, uae_u32 v); void debug_wgetpeek(uaecptr addr, uae_u32 v); @@ -206,8 +206,6 @@ uae_u32 get_iword_debug (uaecptr addr); uae_u32 get_byte_cache_debug(uaecptr addr, bool *cached); uae_u32 get_word_cache_debug(uaecptr addr, bool *cached); uae_u32 get_long_cache_debug(uaecptr addr, bool *cached); -uae_u32 get_iword_cache_debug(uaecptr addr, bool *cached); -uae_u32 get_ilong_cache_debug(uaecptr addr, bool *cached); enum debugtest_item { DEBUGTEST_BLITTER, DEBUGTEST_KEYBOARD, DEBUGTEST_FLOPPY, DEBUGTEST_MAX }; void debugtest (enum debugtest_item, const TCHAR *, ...); @@ -225,13 +223,17 @@ extern struct peekdma peekdma_data; struct dma_rec { - int hpos, vpos; - int dhpos; + int hpos, vpos[2]; + int frame; + uae_u32 tick; + int dhpos[2]; uae_u16 reg; uae_u64 dat; uae_u16 size; uae_u32 addr; - uae_u32 evt, evt2; + uae_u32 evt; + uae_u32 agnus_evt, agnus_evt_changed; + uae_u32 denise_evt[2], denise_evt_changed[2]; uae_u32 evtdata; bool evtdataset; uae_s16 type; @@ -244,10 +246,34 @@ struct dma_rec int ciaphase; uae_u16 ciavalue; bool end; + bool cs, hs, vs; }; extern struct dma_rec *last_dma_rec; +#define DENISE_EVENT_VB 1 +#define DENISE_EVENT_HB 2 +#define DENISE_EVENT_BURST 4 +#define DENISE_EVENT_HDIW 8 +#define DENISE_EVENT_BPL1DAT_HDIW 16 +#define DENISE_EVENT_COPIED 0x40000000 +#define DENISE_EVENT_UNKNOWN 0x80000000 + +#define AGNUS_EVENT_HW_HS 1 +#define AGNUS_EVENT_HW_VS 2 +#define AGNUS_EVENT_HW_CS 4 +#define AGNUS_EVENT_HW_VB 8 +#define AGNUS_EVENT_PRG_HS 16 +#define AGNUS_EVENT_PRG_VS 32 +#define AGNUS_EVENT_PRG_CS 64 +#define AGNUS_EVENT_PRG_VB 128 +#define AGNUS_EVENT_VDIW 256 +#define AGNUS_EVENT_BPRUN 512 +#define AGNUS_EVENT_VE 1024 +#define AGNUS_EVENT_P_VE 2048 +#define AGNUS_EVENT_HB 4096 +#define AGNUS_EVENT_BPRUN2 8192 + #define DMA_EVENT_BLITIRQ 1 #define DMA_EVENT_BLITFINALD 2 #define DMA_EVENT_BLITSTARTFINISH 4 @@ -256,7 +282,7 @@ extern struct dma_rec *last_dma_rec; #define DMA_EVENT_CPUIRQ 32 #define DMA_EVENT_INTREQ 64 #define DMA_EVENT_COPPERWANTED 128 -#define DMA_EVENT_NOONEGETS 256 +#define DMA_EVENT_COPPERWAKE2 256 #define DMA_EVENT_CPUBLITTERSTEAL 512 #define DMA_EVENT_CPUBLITTERSTOLEN 1024 #define DMA_EVENT_COPPERSKIP 2048 @@ -264,25 +290,18 @@ extern struct dma_rec *last_dma_rec; #define DMA_EVENT_DDFSTOP 8192 #define DMA_EVENT_DDFSTOP2 16384 #define DMA_EVENT_SPECIAL 32768 -#define DMA_EVENT_VB 0x00010000 -#define DMA_EVENT_VS 0x00020000 -#define DMA_EVENT_LOF 0x00040000 -#define DMA_EVENT_LOL 0x00080000 -#define DMA_EVENT_HBS 0x00100000 -#define DMA_EVENT_HBE 0x00200000 -#define DMA_EVENT_HDIWS 0x00400000 -#define DMA_EVENT_HDIWE 0x00800000 -#define DMA_EVENT_VDIW 0x01000000 -#define DMA_EVENT_HSS 0x02000000 -#define DMA_EVENT_HSE 0x04000000 -#define DMA_EVENT_CIAA_IRQ 0x08000000 -#define DMA_EVENT_CIAB_IRQ 0x10000000 -#define DMA_EVENT_CPUSTOP 0x20000000 -#define DMA_EVENT_CPUSTOPIPL 0x40000000 -#define DMA_EVENT_CPUINS 0x80000000 -#define DMA_EVENT2_IPL 0x00000001 -#define DMA_EVENT2_IPLSAMPLE 0x00000002 -#define DMA_EVENT2_COPPERUSE 0x00000004 +#define DMA_EVENT_IPL 0x00010000 +#define DMA_EVENT_IPLSAMPLE 0x00020000 +#define DMA_EVENT_COPPERUSE 0x00040000 +#define DMA_EVENT_MODADD 0x00080000 +#define DMA_EVENT_LOF 0x00100000 +#define DMA_EVENT_LOL 0x00200000 + +#define DMA_EVENT_CIAA_IRQ 0x08000000 +#define DMA_EVENT_CIAB_IRQ 0x10000000 +#define DMA_EVENT_CPUSTOP 0x20000000 +#define DMA_EVENT_CPUSTOPIPL 0x40000000 +#define DMA_EVENT_CPUINS 0x80000000 #define DMARECORD_REFRESH 1 #define DMARECORD_CPU 2 @@ -292,30 +311,30 @@ extern struct dma_rec *last_dma_rec; #define DMARECORD_BITPLANE 6 #define DMARECORD_SPRITE 7 #define DMARECORD_DISK 8 -#define DMARECORD_CONFLICT 9 -#define DMARECORD_MAX 10 +#define DMARECORD_UHRESBPL 9 +#define DMARECORD_UHRESSPR 10 +#define DMARECORD_CONFLICT 11 +#define DMARECORD_MAX 12 -extern void record_dma_read(uae_u16 reg, uae_u32 addr, int hpos, int vpos, int type, int extra); -extern void record_dma_write(uae_u16 reg, uae_u32 v, uae_u32 addr, int hpos, int vpos, int type, int extra); +extern void record_dma_read(uae_u16 reg, uae_u32 addr, int type, int extra); +extern void record_dma_write(uae_u16 reg, uae_u32 v, uae_u32 addr, int type, int extra); extern void record_dma_read_value(uae_u32 v); -extern void record_dma_read_value_pos(uae_u32 v, int hpos, int vpos); +extern void record_dma_read_value_pos(uae_u32 v); extern void record_dma_read_value_wide(uae_u64 v, bool quad); -extern void record_dma_replace(int hpos, int vpos, int type, int extra); +extern void record_dma_replace( int type, int extra); extern void record_dma_reset(int); -extern void record_dma_event(uae_u32 evt, int hpos, int vpos); -extern void record_dma_event2(uae_u32 evt, int hpos, int vpos); -extern void record_dma_event_data(uae_u32 evt, int hpos, int vpos, uae_u32 data); -extern void record_dma_clear(int hpos, int vpos); -extern bool record_dma_check(int hpos, int vpos); -extern void record_dma_hsync(int); -extern void record_dma_vsync(int); -extern void record_dma_reoffset(int, int, int); -extern void record_cia_access(int r, int mask, uae_u16 value, bool rw, int hpos, int vpos, int phase); -extern void record_dma_ipl(int hpos, int vpos); -extern void record_dma_ipl_sample(int hpos, int vpos); -extern void record_dma_denise(int pos, int dhpos); +extern void record_dma_event_agnus(uae_u32 evt, bool onoff); +extern void record_dma_event_denise(struct dma_rec *rd, int h, uae_u32 evt, bool onoff); +extern void record_dma_event(uae_u32 evt); +extern void record_dma_event_data(uae_u32 evt, uae_u32 data); +extern void record_dma_clear(void); +extern bool record_dma_check(void); +extern void record_cia_access(int r, int mask, uae_u16 value, bool rw, int phase); +extern void record_dma_ipl(void); +extern void record_dma_ipl_sample(void); extern void debug_mark_refreshed(uaecptr); extern void debug_draw(uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *xredcolors, uae_u32 *xgreencolors, uae_u32 *xbluescolors); +extern struct dma_rec *record_dma_next_cycle(int hpos, int vpos, int vvpos); #define TRACE_SKIP_INS 1 #define TRACE_MATCH_PC 2 diff --git a/include/disk.h b/include/disk.h index bfffae00..237e5a81 100644 --- a/include/disk.h +++ b/include/disk.h @@ -107,7 +107,7 @@ extern void DSKPTH (uae_u16); extern void DSKDAT (uae_u16); extern uae_u16 DSKDATR (int); extern uae_u16 disk_dmal (void); -extern uaecptr disk_getpt (void); +extern uaecptr *disk_getpt (void); extern int disk_fifostatus (void); extern uae_u16 DSKBYTR_fake(int); diff --git a/include/drawing.h b/include/drawing.h index b9a209d4..0e730cd3 100644 --- a/include/drawing.h +++ b/include/drawing.h @@ -22,134 +22,30 @@ #define MAX_PLANES 6 #endif +#define MAX_SPRITES 8 + extern int lores_shift, shres_shift, interlace_seen; extern int visible_left_border, visible_right_border; extern int detected_screen_resolution; -extern int hsync_end_left_border, denisehtotal; +extern int hsync_end_left_border, hdisplay_left_border, denisehtotal; + +extern bool exthblanken; #define AMIGA_WIDTH_MAX (754 / 2) #define AMIGA_HEIGHT_MAX_PAL (576 / 2) #define AMIGA_HEIGHT_MAX_NTSC (486 / 2) #define AMIGA_HEIGHT_MAX (AMIGA_HEIGHT_MAX_PAL) -// Cycles * 2 from start of scanline to first refresh slot (hsync strobe slot) -#define DDF_OFFSET (2 * 4) - -#define RECORDED_REGISTER_CHANGE_OFFSET 0x1000 - -/* According to the HRM, pixel data spends a couple of cycles somewhere in the chips -before it appears on-screen. (TW: display emulation now does this automatically) */ -#define DIW_DDF_OFFSET 1 -#define DIW_DDF_OFFSET_SHRES (DIW_DDF_OFFSET << 2) -/* We ignore that many lores pixels at the start of the display. These are -* invisible anyway due to hardware DDF limits. */ -#define DISPLAY_LEFT_SHIFT 0 -#define DISPLAY_LEFT_SHIFT_SHRES (DISPLAY_LEFT_SHIFT << 2) - #define CCK_SHRES_SHIFT 3 -STATIC_INLINE int shres_coord_hw_to_window_x(int x) -{ - x -= DISPLAY_LEFT_SHIFT_SHRES; - x <<= lores_shift; - x >>= 2; - return x; -} - -STATIC_INLINE int coord_hw_to_window_x_shres(int xx) -{ - int x = xx >> (CCK_SHRES_SHIFT - 1); - x -= DISPLAY_LEFT_SHIFT; - if (lores_shift == 1) { - x <<= 1; - x |= (xx >> 1) & 1; - } else if (lores_shift == 2) { - x <<= 2; - x |= xx & 3; - } - return x; -} -STATIC_INLINE int coord_hw_to_window_x_lores(int x) -{ - x -= DISPLAY_LEFT_SHIFT; - return x << lores_shift; -} - -STATIC_INLINE int PIXEL_XPOS(int xx) -{ - int x = xx >> (CCK_SHRES_SHIFT - 1); - x -= DISPLAY_LEFT_SHIFT; - x += DIW_DDF_OFFSET; - x -= 1; - if (lores_shift == 1) { - x <<= 1; - x |= (xx >> 1) & 1; - } else if (lores_shift == 2) { - x <<= 2; - x |= xx & 3; - } - return x; -} - -#define min_diwlastword (PIXEL_XPOS(hsyncstartpos_start_cycles << CCK_SHRES_SHIFT)) -#define max_diwlastword (PIXEL_XPOS(denisehtotal)) - -STATIC_INLINE int coord_window_to_hw_x(int x) -{ - x >>= lores_shift; - return x + DISPLAY_LEFT_SHIFT; -} - -STATIC_INLINE int coord_diw_lores_to_window_x(int x) -{ - return (x - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1) << lores_shift; -} - -STATIC_INLINE int coord_diw_shres_to_window_x(int x) -{ - return (x - DISPLAY_LEFT_SHIFT_SHRES + DIW_DDF_OFFSET_SHRES - (1 << 2)) >> shres_shift; -} - -STATIC_INLINE int coord_window_to_diw_x(int x) -{ - x = coord_window_to_hw_x (x); - return x - DIW_DDF_OFFSET; -} +#define max_diwlastword (denisehtotal << CCK_SHRES_SHIFT) /* color values in two formats: 12 (OCS/ECS) or 24 (AGA) bit Amiga RGB (color_regs), * and the native color value; both for each Amiga hardware color register. * * !!! See color_reg_xxx functions below before touching !!! */ -#define CE_BORDERBLANK 0 -#define CE_BORDERNTRANS 1 -#define CE_BORDERSPRITE 2 -#define CE_EXTBLANKSET 3 -#define CE_SHRES_DELAY_SHIFT 8 - -STATIC_INLINE bool ce_is_borderblank(uae_u16 data) -{ - return (data & (1 << CE_BORDERBLANK)) != 0; -} -STATIC_INLINE bool ce_is_extblankset(uae_u16 data) -{ - return (data & (1 << CE_EXTBLANKSET)) != 0; -} -STATIC_INLINE bool ce_is_bordersprite(uae_u16 data) -{ - return (data & (1 << CE_BORDERSPRITE)) != 0; -} -STATIC_INLINE bool ce_is_borderntrans(uae_u16 data) -{ - return (data & (1 << CE_BORDERNTRANS)) != 0; -} -#define VB_VB 0x20 // vblank -#define VB_VS 0x10 // vsync -#define VB_XBORDER 0x08 // forced border color or bblank -#define VB_XBLANK 0x04 // forced bblank -#define VB_PRGVB 0x02 // programmed vblank -#define VB_NOVB 0x01 // normal struct color_entry { uae_u16 color_regs_ecs[32]; @@ -159,7 +55,7 @@ struct color_entry { xcolnr acolors[256]; uae_u32 color_regs_aga[256]; #endif - uae_u16 extra; + bool color_regs_genlock[256]; }; #ifdef AGA @@ -205,53 +101,6 @@ STATIC_INLINE void color_reg_set (struct color_entry *ce, int c, int v) #endif ce->color_regs_ecs[c] = v; } -STATIC_INLINE int color_reg_cmp (struct color_entry *ce1, struct color_entry *ce2) -{ - int v; -#ifdef AGA - if (aga_mode) - v = memcmp (ce1->color_regs_aga, ce2->color_regs_aga, sizeof (uae_u32) * 256); - else -#endif - v = memcmp (ce1->color_regs_ecs, ce2->color_regs_ecs, sizeof (uae_u16) * 32); - if (!v && ce1->extra == ce2->extra) - return 0; - return 1; -} -/* ugly copy hack, is there better solution? */ -STATIC_INLINE void color_reg_cpy (struct color_entry *dst, struct color_entry *src) -{ - dst->extra = src->extra; -#ifdef AGA - if (aga_mode) - /* copy acolors and color_regs_aga */ - memcpy (dst->acolors, src->acolors, sizeof(struct color_entry) - sizeof(uae_u16) * 32); - else -#endif - /* copy first 32 acolors and color_regs_ecs */ - memcpy (dst->color_regs_ecs, src->color_regs_ecs, sizeof(struct color_entry)); -} - -/* -* The idea behind this code is that at some point during each horizontal -* line, we decide how to draw this line. There are many more-or-less -* independent decisions, each of which can be taken at a different horizontal -* position. -* Sprites and color changes are handled specially: There isn't a single decision, -* but a list of structures containing information on how to draw the line. -*/ - -#define COLOR_CHANGE_BRDBLANK 0x80000000 -#define COLOR_CHANGE_SHRES_DELAY 0x40000000 -#define COLOR_CHANGE_BLANK 0x20000000 -#define COLOR_CHANGE_ACTBORDER (COLOR_CHANGE_BLANK | COLOR_CHANGE_BRDBLANK) -#define COLOR_CHANGE_MASK 0xf0000000 -#define COLOR_CHANGE_GENLOCK 0x01000000 -struct color_change { - int linepos; - int regno; - uae_u32 value; -}; /* 440 rather than 880, since sprites are always lores. */ #ifdef UAE_MINI @@ -260,88 +109,10 @@ struct color_change { #define MAX_PIXELS_PER_LINE 2304 #endif -#define MAXVPOS_WRAPLINES 10 - -/* No divisors for MAX_PIXELS_PER_LINE; we support AGA and SHRES sprites */ -#define MAX_SPR_PIXELS ((((MAXVPOS + MAXVPOS_WRAPLINES) * 2 + 1) * MAX_PIXELS_PER_LINE) / 4) - -struct sprite_entry -{ - uae_u16 pos; - uae_u16 max; - uae_u32 first_pixel; - bool has_attached; -}; - -struct sprite_stb -{ - /* Eight bits for every pixel for attachment - * Another eight for 64/32 status - */ - uae_u8 stb[2 * MAX_SPR_PIXELS]; - uae_u16 stbfm[2 * MAX_SPR_PIXELS]; -}; -extern struct sprite_stb spixstate; - -#ifdef OS_WITHOUT_MEMORY_MANAGEMENT -extern uae_u16 *spixels; -#else -extern uae_u16 spixels[MAX_SPR_PIXELS * 2]; -#endif - -/* Way too much... */ -#define MAX_REG_CHANGE ((MAXVPOS + MAXVPOS_WRAPLINES) * 2 * MAXHPOS / 2) - -extern struct color_entry *curr_color_tables, *prev_color_tables; - -extern struct sprite_entry *curr_sprite_entries, *prev_sprite_entries; -extern struct color_change *curr_color_changes, *prev_color_changes; -extern struct draw_info *curr_drawinfo, *prev_drawinfo; - -/* struct decision contains things we save across drawing frames for -* comparison (smart update stuff). */ -struct decision { - /* Records the leftmost access of BPL1DAT. */ - int plfleft, plfright, plflinelen; - /* Display window: native coordinates, depend on lores state. */ - int diwfirstword, diwlastword; - int ctable; - - uae_u16 bplcon0, bplcon2; -#ifdef AGA - uae_u16 bplcon3, bplcon4bm, bplcon4sp; - uae_u16 fmode; -#endif - uae_u8 nr_planes, max_planes; - uae_u8 bplres; - bool ehb_seen; - bool ham_seen; - bool ham_at_start; -#ifdef AGA - bool bordersprite_seen; - bool xor_seen; - uae_u8 vb; -#endif -}; - -/* Anything related to changes in hw registers during the DDF for one -* line. */ -struct draw_info { - int first_sprite_entry, last_sprite_entry; - int first_color_change, last_color_change; - int nr_color_changes, nr_sprites; -}; - -extern struct decision line_decisions[2 * (MAXVPOS + MAXVPOS_WRAPLINES) + 1]; - -extern uae_u8 line_data[(MAXVPOS + MAXVPOS_WRAPLINES) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; - /* Functions in drawing.c. */ extern int coord_native_to_amiga_y (int); extern int coord_native_to_amiga_x (int); -extern void record_diw_line (int plfstrt, int first, int last); - /* Determine how to draw a scan line. */ enum nln_how { /* All lines on a non-doubled display. */ @@ -360,12 +131,8 @@ enum nln_how { nln_lower_black_always }; -extern void hsync_record_line_state(int lineno, enum nln_how, int changed); -extern void hsync_record_line_state_last(int lineno, enum nln_how, int changed); extern void vsync_handle_redraw (int long_field, int lof_changed, uae_u16, uae_u16, bool drawlines, bool initial); extern bool vsync_handle_check (void); -extern void draw_lines(int end, int section); -extern void init_hardware_for_drawing_frame (void); extern void reset_drawing (void); extern void drawing_init (void); extern bool notice_interlace_seen(int, bool); @@ -373,7 +140,6 @@ extern void notice_resolution_seen(int, bool); extern bool frame_drawn (int monid); extern void redraw_frame(void); extern void full_redraw_all(void); -extern bool draw_frame (struct vidbuffer*); extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh); extern void store_custom_limits (int w, int h, int dx, int dy); extern void set_custom_limits (int w, int h, int dx, int dy, bool blank); @@ -381,12 +147,12 @@ extern void check_custom_limits (void); extern void get_custom_topedge (int *x, int *y, bool max); extern void get_custom_raw_limits (int *pw, int *ph, int *pdx, int *pdy); void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl); -extern void putpixel (uae_u8 *buf, uae_u8 *genlockbuf, int bpp, int x, xcolnr c8); +extern void putpixel (uae_u8 *buf, uae_u16 *genlockbuf, int bpp, int x, xcolnr c8); extern void allocvidbuffer(int monid, struct vidbuffer *buf, int width, int height, int depth); extern void freevidbuffer(int monid, struct vidbuffer *buf); extern void check_prefs_picasso(void); extern int get_vertical_visible_height(bool); -extern void get_screen_blanking_limits(int*, int*, int*, int*); +extern void get_mode_blanking_limits(int *phbstop, int *phbstrt, int *pvbstop, int *pvbstrt); /* Finally, stuff that shouldn't really be shared. */ @@ -400,4 +166,13 @@ void set_inhibit_frame(int monid, int bit); void clear_inhibit_frame(int monid, int bit); void toggle_inhibit_frame(int monid, int bit); +extern struct color_entry denise_colors; +void draw_denise_line(int gfx_ypos, nln_how how, uae_u32 linecnt, int startpos, int total, int dtotal, int calib_start, int calib_len); +bool draw_denise_line_fast(uae_u8 *bplpt[8], int bplstart, int bpllen, int gfx_ypos, enum nln_how how, int dstart, int dtotal, bool vblank, struct denise_fastsprite *dfs); +bool start_draw_denise(void); +void end_draw_denise(void); +void denise_update_reg(uae_u16 reg, uae_u16 v); +void denise_reset(bool); + + #endif /* UAE_DRAWING_H */ diff --git a/include/events.h b/include/events.h index ea61af09..4c78c48d 100644 --- a/include/events.h +++ b/include/events.h @@ -35,12 +35,14 @@ extern void do_cycles_ce(int cycles); extern void do_cycles_ce020(int cycles); extern void events_schedule(void); extern void do_cycles_slow(int cycles_to_add); +extern void do_cycles_normal(int cycles_to_add); extern void events_reset_syncline(void); extern void clear_events(void); extern bool is_cycle_ce(uaecptr); extern evt_t currcycle, nextevent; +extern uae_u32 currcycle_cck; extern int is_syncline; extern evt_t is_syncline_end; typedef void (*evfunc)(void); @@ -64,19 +66,23 @@ struct ev2 // hsync handlers must have priority over misc enum { - ev_cia, ev_hsync, ev_hsynch, ev_misc, + ev_sync, + ev_cia, + ev_misc, ev_audio, ev_max }; enum { ev2_blitter, ev2_misc, - ev2_max = 12 + ev2_max = 8 }; extern int pissoff_value; extern int pissoff; +extern int do_cycles_cck(int); + #define countdown pissoff #define do_cycles do_cycles_slow @@ -84,6 +90,7 @@ extern struct ev eventtab[ev_max]; extern struct ev2 eventtab2[ev2_max]; extern int maxhpos; +extern int custom_fastmode; STATIC_INLINE void cycles_do_special (void) { @@ -107,25 +114,32 @@ STATIC_INLINE evt_t get_cycles(void) { return currcycle; } +STATIC_INLINE uae_u32 get_cck_cycles(void) +{ + return currcycle_cck; +} STATIC_INLINE void set_cycles (evt_t x) { currcycle = x; - eventtab[ev_hsync].oldcycles = x; - eventtab[ev_hsynch].active = 0; #ifdef EVT_DEBUG if (currcycle & (CYCLE_UNIT - 1)) write_log (_T("%x\n"), currcycle); #endif } -STATIC_INLINE int current_hpos_safe(void) +STATIC_INLINE uae_u8 current_hpos_safe(void) +{ + extern uae_u8 agnus_hpos; + return agnus_hpos; +} +STATIC_INLINE uae_u8 current_hpos(void) { - int hp = (int)((get_cycles() - eventtab[ev_hsync].oldcycles)) / CYCLE_UNIT; + uae_u8 hp = current_hpos_safe(); return hp; } -extern int current_hpos(void); +extern uae_u8 current_hpos(void); STATIC_INLINE bool cycles_in_range(evt_t endcycles) { diff --git a/include/gui.h b/include/gui.h index dc3c074f..12df39e3 100644 --- a/include/gui.h +++ b/include/gui.h @@ -15,10 +15,7 @@ extern int gui_init (void); extern int gui_update (void); extern void gui_exit (void); extern void gui_led (int, int, int); -extern void gui_handle_events (void); extern void gui_filename (int, const TCHAR *); -extern void gui_fps (int fps, int idle, int color); -extern void gui_changesettings (void); extern void gui_fps (int fps, int lines, bool lace, int idle, int color); extern void gui_lock (void); extern void gui_unlock (void); @@ -85,9 +82,6 @@ struct gui_info extern struct gui_info gui_data; -/* Functions to be called when prefs are changed by non-gui code. */ -extern void gui_update_gfx (void); - void notify_user (int msg); void notify_user_parms (int msg, const TCHAR *parms, ...); int translate_message (int msg, TCHAR *out); diff --git a/include/newcpu.h b/include/newcpu.h index 6f9793f1..c752bea9 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -323,7 +323,6 @@ extern bool m68k_interrupt_delay; extern void safe_interrupt_set(int, int, bool); #define SPCFLAG_CPUINRESET 2 -#define SPCFLAG_COPPER 4 #define SPCFLAG_INT 8 #define SPCFLAG_BRK 16 #define SPCFLAG_UAEINT 32 @@ -732,7 +731,6 @@ extern void init_m68k (void); extern void m68k_go (int); extern void m68k_dumpstate(uaecptr *, uaecptr); extern void m68k_dumpcache(bool); -extern bool m68k_readcache(uaecptr memaddr, bool dc, uae_u32* valp); extern int getMulu68kCycles(uae_u16 src); extern int getMuls68kCycles(uae_u16 src); extern int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor); diff --git a/include/options.h b/include/options.h index 6d838bde..4a380f4a 100644 --- a/include/options.h +++ b/include/options.h @@ -14,9 +14,9 @@ #include "traps.h" -#define UAEMAJOR 5 -#define UAEMINOR 3 -#define UAESUBREV 1 +#define UAEMAJOR 6 +#define UAEMINOR 0 +#define UAESUBREV 0 #define MAX_AMIGADISPLAYS 4 @@ -772,6 +772,7 @@ struct uae_prefs { struct cdslot cdslots[MAX_TOTAL_SCSI_DEVICES]; TCHAR quitstatefile[MAX_DPATH]; TCHAR statefile[MAX_DPATH]; + TCHAR statefile_path[MAX_DPATH]; TCHAR inprecfile[MAX_DPATH]; TCHAR trainerfile[MAX_DPATH]; bool inprec_autoplay; diff --git a/include/savestate.h b/include/savestate.h index 86da1149..c750a8e3 100644 --- a/include/savestate.h +++ b/include/savestate.h @@ -55,12 +55,14 @@ extern TCHAR *restore_path_full_func(uae_u8 **); #define save_u32t(x) save_u32t_func(&dst, (x)) #define save_u16(x) save_u16_func(&dst, (x)) #define save_u8(x) save_u8_func(&dst, (x)) +#define save_s8(x) save_u8_func(&dst, (uae_u8)(x)) #define restore_u64() restore_u64_func(&src) #define restore_u64to32() (uae_u32)restore_u64_func(&src) #define restore_u32() restore_u32_func(&src) #define restore_u16() restore_u16_func(&src) #define restore_u8() restore_u8_func(&src) +#define restore_s8() ((uae_s8)restore_u8_func(&src)) #define save_string(x) save_string_func(&dst, (x)) #define restore_string() restore_string_func(&src) @@ -105,6 +107,12 @@ extern void restore_custom_start(void); extern uae_u8 *restore_custom_sprite(int num, uae_u8 *src); extern uae_u8 *save_custom_sprite(int num, size_t *len, uae_u8 *); +uae_u8 *save_custom_sprite_denise(int num, uae_u8 *dst); +uae_u8 *restore_custom_sprite_denise(int num, uae_u8 *src, uae_u16 pos, uae_u16 ctl); +uae_u8 *save_custom_bpl(size_t *len, uae_u8 *dstptr); +uae_u8 *restore_custom_bpl(uae_u8 *src); +uae_u16 save_custom_bpl_dat(int num); +void restore_custom_bpl_dat(int num, uae_u16 dat); extern uae_u8 *restore_custom_agacolors (uae_u8 *src); extern uae_u8 *save_custom_agacolors(size_t *len, uae_u8 *); @@ -184,7 +192,6 @@ extern uae_u8 *save_gayle_ide(int num, size_t *len, uae_u8*); extern uae_u8 *save_cd(int num, size_t *len); extern uae_u8 *restore_cd(int, uae_u8 *src); -extern void restore_cd_finish(void); extern uae_u8 *save_configuration(size_t *len, bool fullconfig); extern uae_u8 *restore_configuration(uae_u8 *src); diff --git a/include/specialmonitors.h b/include/specialmonitors.h index e67e3f02..201b4198 100644 --- a/include/specialmonitors.h +++ b/include/specialmonitors.h @@ -4,7 +4,6 @@ #include "memory.h" bool emulate_specialmonitors(struct vidbuffer *src, struct vidbuffer *dst); -bool emulate_specialmonitors_line(struct vidbuffer *src, struct vidbuffer *dst, int line); void specialmonitor_store_fmode(int vpos, int hpos, uae_u16 fmode); void specialmonitor_reset(void); bool specialmonitor_need_genlock(void); diff --git a/linetoscr.cpp b/linetoscr.cpp deleted file mode 100644 index e2388f38..00000000 --- a/linetoscr.cpp +++ /dev/null @@ -1,21120 +0,0 @@ -/* - * UAE - The portable Amiga emulator. - * - * This file was generated by genlinetoscr. Don't edit. - */ - -static int NOINLINE linetoscr_16(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch1(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch1_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch2(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch2_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1f(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1f_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2f(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2f_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch1_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch1_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch2_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_stretch2_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1f_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink1f_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2f_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_16_shrink2f_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -#ifdef AGA -static int NOINLINE linetoscr_16_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch1_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch2_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1f_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2f_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch1_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch1_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch2_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch2_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1f_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1f_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2f_aga(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2f_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_HAM: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - case CMODE_EXTRAHB: - { - int rem; - if (((uintptr_t)&buf[dpix]) & 2) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - if (dpix >= dpix_end) - return spix; - rem = (((uintptr_t)&buf[dpix_end]) & 2); - if (rem) - dpix_end--; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = (out_val & 0xFFFF) | (dpix_val << 16); - *((uae_u32 *)&buf[dpix]) = out_val; - dpix += 2; - } - if (rem) { - uae_u32 spix_val; - uae_u32 dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - buf[dpix++] = dpix_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch1_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch1_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch2_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_stretch2_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1f_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink1f_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel16 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2f_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_16_shrink2f_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u16 *buf = (uae_u16 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel16 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); - dpix_val = merge_2pixel16 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -static int NOINLINE linetoscr_32(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch1(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch1_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch2(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch2_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1f(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1f_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2f(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2f_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch1_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch1_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch2_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_stretch2_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - - genlock_buf[dpix + 2] = genlock_buf[dpix]; - - genlock_buf[dpix + 3] = genlock_buf[dpix]; - - } - } - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1f_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink1f_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2f_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -static int NOINLINE linetoscr_32_shrink2f_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = p_xcolors[spix_val]; - sprpix_val = pixdata.apixels[spix]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 15); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[lookup[spix_val]]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 1, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - if (spix_val <= 31) - dpix_val = p_acolors[spix_val]; - else - dpix_val = p_xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB_ECS_KILLEHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - dpix_val = p_acolors[spix_val & 31]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix, 0, sprpix_val, 0); - if (sprcol) { - uae_u32 spcol = p_acolors[sprcol]; - out_val = spcol; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} - -#ifdef AGA -static int NOINLINE linetoscr_32_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch1_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch2_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1f_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2f_aga_spronly(int spix, int dpix, int dpix_end, int blank) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - - if (1) { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 out_val; - - sprpix_val = 0; - spix++; - out_val = blank ? 0 : p_acolors[0]; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch1_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch1_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch2_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch2_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1f_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1f_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2f_aga(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2f_aga_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch1_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch1_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch2_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_stretch2_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - genlock_buf[dpix + 1] = genlock_buf[dpix]; - genlock_buf[dpix + 2] = genlock_buf[dpix]; - genlock_buf[dpix + 3] = genlock_buf[dpix]; - { - uae_u32 out_val1 = out_val; - uae_u32 out_val2 = out_val; - uae_u32 out_val3 = out_val; - uae_u32 out_val4 = out_val; - if (spritepixels[dpix + 0].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val1 = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - if (spritepixels[dpix + 1].data) { - sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); - if (sprcol) { - out_val2 = p_acolors[sprcol]; - genlock_buf[dpix + 1] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 2].data) { - sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); - if (sprcol) { - out_val3 = p_acolors[sprcol]; - genlock_buf[dpix + 2] = get_genlock_transparency(sprcol); - - } - } - if (spritepixels[dpix + 3].data) { - sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); - if (sprcol) { - out_val4 = p_acolors[sprcol]; - genlock_buf[dpix + 3] = get_genlock_transparency(sprcol); - - } - } - buf[dpix++] = out_val1; - buf[dpix++] = out_val2; - buf[dpix++] = out_val3; - buf[dpix++] = out_val4; - } - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 2; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1f_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink1f_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - dpix_val = merge_2pixel32 (dpix_val, tmp_val); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix += 4; - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2f_aga_spr(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - -#ifdef AGA -static int NOINLINE linetoscr_32_shrink2f_aga_spr_genlock(int spix, int dpix, int dpix_end) -{ - uae_u32 *buf = (uae_u32 *) xlinebuffer; - uae_u8 *genlock_buf = xlinebuffer_genlock; - uae_u8 sprcol; - uae_u8 xor_val = bplxor; - uae_u8 and_val = bpland; - - switch(bplmode) - { - case CMODE_NORMAL: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_HAM: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = ham_linebuf[spix]; - dpix_val = CONVERT_RGB (spix_val); - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency((spix_val >> 2) & 63); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_DUALPF: - { - int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; - int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val2 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - spix++; - tmp_val3 = dpix_val; - spix_val = pixdata.apixels[spix]; - sprpix_val = spix_val; - { - uae_u8 val = lookup[spix_val]; - if (lookup_no[spix_val]) - val += dblpfofs[bpldualpf2of]; - val ^= xor_val; - dpix_val = p_acolors[val]; - } - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(lookup[spix_val]); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - case CMODE_EXTRAHB: - { - while (dpix < dpix_end) { - uae_u32 sprpix_val; - uae_u32 spix_val; - uae_u32 dpix_val; - uae_u32 out_val; - - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - { - uae_u32 tmp_val, tmp_val2, tmp_val3; - spix++; - tmp_val = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val2 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - spix++; - tmp_val3 = dpix_val; - sprpix_val = pixdata.apixels[spix]; - spix_val = (pixdata.apixels[spix] ^ xor_val) & and_val; - if (pixdata.apixels[spix] & 0x20) { - unsigned int c = (colors_for_drawing.color_regs_aga[spix_val & 0x1f] >> 1) & 0x7F7F7F; - dpix_val = CONVERT_RGB (c); - } else - dpix_val = p_acolors[spix_val]; - tmp_val = merge_2pixel32 (tmp_val, tmp_val2); - tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); - dpix_val = merge_2pixel32 (tmp_val, tmp_val2); - spix++; - } - out_val = dpix_val; - genlock_buf[dpix] = get_genlock_transparency(spix_val & 31); - if (spritepixels[dpix].data) { - sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); - if (sprcol) { - out_val = p_acolors[sprcol]; - genlock_buf[dpix] = get_genlock_transparency(sprcol); - } - } - buf[dpix++] = out_val; - } - } - break; - } - - return spix; -} -#endif - diff --git a/linetoscr_aga_fm0.cpp b/linetoscr_aga_fm0.cpp new file mode 100644 index 00000000..c3450460 --- /dev/null +++ b/linetoscr_aga_fm0.cpp @@ -0,0 +1,30462 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm0_n0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 15) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} diff --git a/linetoscr_aga_fm0_genlock.cpp b/linetoscr_aga_fm0_genlock.cpp new file mode 100644 index 00000000..99d6de00 --- /dev/null +++ b/linetoscr_aga_fm0_genlock.cpp @@ -0,0 +1,13446 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm0_n0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ham1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_kehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_n1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_dpf1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4(); + } + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm0_ehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_n1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_dpf1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_ham1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm0_kehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} diff --git a/linetoscr_aga_fm1.cpp b/linetoscr_aga_fm1.cpp new file mode 100644 index 00000000..cece5927 --- /dev/null +++ b/linetoscr_aga_fm1.cpp @@ -0,0 +1,45242 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm1_n0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + } + loaded_pix = getbpl6_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e(); + loaded_pix = getbpl2_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o(); + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e(); + loaded_pix = getbpl6_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o(); + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl2o(); + } + loaded_pix = getbpl2_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p6_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} diff --git a/linetoscr_aga_fm1_genlock.cpp b/linetoscr_aga_fm1_genlock.cpp new file mode 100644 index 00000000..66fb1d8f --- /dev/null +++ b/linetoscr_aga_fm1_genlock.cpp @@ -0,0 +1,21508 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm1_n0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + shiftbpl4(); + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + } + loaded_pix = getbpl8_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e(); + loaded_pix = getbpl4_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o(); + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ham1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e(); + loaded_pix = getbpl8_32(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o(); + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_32(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_32(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_kehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_n1_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf0_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_dpf1_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 0) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 1) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 2) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4(); + if (bpldat_copy[0] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && ((cnt | 3) & 31) == bplcon1_shift_full_masked[1]) { + copybpl4o(); + } + loaded_pix = getbpl4_32(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm1_ehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_n1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_dpf1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_ham1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm1_kehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} diff --git a/linetoscr_aga_fm2.cpp b/linetoscr_aga_fm2.cpp new file mode 100644 index 00000000..3d7cb4e0 --- /dev/null +++ b/linetoscr_aga_fm2.cpp @@ -0,0 +1,58844 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm2_n0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dlores(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + shiftbpl2_64(); + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + shiftbpl6_64(); + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dlores_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dhires(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl2_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl2_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl6_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl6_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dhires_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl2e_64(); + loaded_pix = getbpl2_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl2o_64(); + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl2_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl2_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl6e_64(); + loaded_pix = getbpl6_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl6o_64(); + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl6_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl6_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dshres(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p2_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl2_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl2e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl2o_64(); + } + loaded_pix = getbpl2_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p2_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb1_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + if (!(pix0 & 0x20)) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix0 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val0 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + if (!(pix1 & 0x20)) { + dpix_val1 = denise_colors.acolors[pix1]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix1 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val1 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + if (!(pix2 & 0x20)) { + dpix_val2 = denise_colors.acolors[pix2]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix2 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val2 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + if (!(pix3 & 0x20)) { + dpix_val3 = denise_colors.acolors[pix3]; + } else { + uae_u32 v = (denise_colors.color_regs_aga[pix3 & 0x1f] >> 1) & 0x7f7f7f; + dpix_val3 = CONVERT_RGB(v); + } + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham0_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb1_p6_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + pix0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[pix0 & 31]; + } + last_bpl_pix = pix0; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + pix1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[pix1 & 31]; + } + last_bpl_pix = pix1; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + pix2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[pix2 & 31]; + } + last_bpl_pix = pix2; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + pix3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[pix3 & 31]; + } + last_bpl_pix = pix3; + } + shiftbpl6_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl6e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl6o_64(); + } + loaded_pix = getbpl6_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n0_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + } + } + dtbuf[h][1] = dpix_val1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + } + } + dtbuf[h][2] = dpix_val2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + } + } + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dshres_spr(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_aga_funcs[] = { + lts_aga_fm0_n0_p2_ilores_dlores, + lts_aga_fm0_n1_p2_ilores_dlores, + lts_aga_fm0_dpf0_p2_ilores_dlores, + lts_aga_fm0_dpf1_p2_ilores_dlores, + lts_aga_fm0_ehb0_p2_ilores_dlores, + lts_aga_fm0_ehb1_p2_ilores_dlores, + lts_aga_fm0_ham0_p2_ilores_dlores, + lts_aga_fm0_ham1_p2_ilores_dlores, + lts_aga_fm0_kehb0_p2_ilores_dlores, + lts_aga_fm0_kehb1_p2_ilores_dlores, + lts_aga_fm0_n0_p4_ilores_dlores, + lts_aga_fm0_n1_p4_ilores_dlores, + lts_aga_fm0_dpf0_p4_ilores_dlores, + lts_aga_fm0_dpf1_p4_ilores_dlores, + lts_aga_fm0_ehb0_p4_ilores_dlores, + lts_aga_fm0_ehb1_p4_ilores_dlores, + lts_aga_fm0_ham0_p4_ilores_dlores, + lts_aga_fm0_ham1_p4_ilores_dlores, + lts_aga_fm0_kehb0_p4_ilores_dlores, + lts_aga_fm0_kehb1_p4_ilores_dlores, + lts_aga_fm0_n0_p6_ilores_dlores, + lts_aga_fm0_n1_p6_ilores_dlores, + lts_aga_fm0_dpf0_p6_ilores_dlores, + lts_aga_fm0_dpf1_p6_ilores_dlores, + lts_aga_fm0_ehb0_p6_ilores_dlores, + lts_aga_fm0_ehb1_p6_ilores_dlores, + lts_aga_fm0_ham0_p6_ilores_dlores, + lts_aga_fm0_ham1_p6_ilores_dlores, + lts_aga_fm0_kehb0_p6_ilores_dlores, + lts_aga_fm0_kehb1_p6_ilores_dlores, + lts_aga_fm0_n0_p8_ilores_dlores, + lts_aga_fm0_n1_p8_ilores_dlores, + lts_aga_fm0_dpf0_p8_ilores_dlores, + lts_aga_fm0_dpf1_p8_ilores_dlores, + lts_aga_fm0_ehb0_p8_ilores_dlores, + lts_aga_fm0_ehb1_p8_ilores_dlores, + lts_aga_fm0_ham0_p8_ilores_dlores, + lts_aga_fm0_ham1_p8_ilores_dlores, + lts_aga_fm0_kehb0_p8_ilores_dlores, + lts_aga_fm0_kehb1_p8_ilores_dlores, + lts_aga_fm0_n0_p2_ilores_dlores_spr, + lts_aga_fm0_n1_p2_ilores_dlores_spr, + lts_aga_fm0_dpf0_p2_ilores_dlores_spr, + lts_aga_fm0_dpf1_p2_ilores_dlores_spr, + lts_aga_fm0_ehb0_p2_ilores_dlores_spr, + lts_aga_fm0_ehb1_p2_ilores_dlores_spr, + lts_aga_fm0_ham0_p2_ilores_dlores_spr, + lts_aga_fm0_ham1_p2_ilores_dlores_spr, + lts_aga_fm0_kehb0_p2_ilores_dlores_spr, + lts_aga_fm0_kehb1_p2_ilores_dlores_spr, + lts_aga_fm0_n0_p4_ilores_dlores_spr, + lts_aga_fm0_n1_p4_ilores_dlores_spr, + lts_aga_fm0_dpf0_p4_ilores_dlores_spr, + lts_aga_fm0_dpf1_p4_ilores_dlores_spr, + lts_aga_fm0_ehb0_p4_ilores_dlores_spr, + lts_aga_fm0_ehb1_p4_ilores_dlores_spr, + lts_aga_fm0_ham0_p4_ilores_dlores_spr, + lts_aga_fm0_ham1_p4_ilores_dlores_spr, + lts_aga_fm0_kehb0_p4_ilores_dlores_spr, + lts_aga_fm0_kehb1_p4_ilores_dlores_spr, + lts_aga_fm0_n0_p6_ilores_dlores_spr, + lts_aga_fm0_n1_p6_ilores_dlores_spr, + lts_aga_fm0_dpf0_p6_ilores_dlores_spr, + lts_aga_fm0_dpf1_p6_ilores_dlores_spr, + lts_aga_fm0_ehb0_p6_ilores_dlores_spr, + lts_aga_fm0_ehb1_p6_ilores_dlores_spr, + lts_aga_fm0_ham0_p6_ilores_dlores_spr, + lts_aga_fm0_ham1_p6_ilores_dlores_spr, + lts_aga_fm0_kehb0_p6_ilores_dlores_spr, + lts_aga_fm0_kehb1_p6_ilores_dlores_spr, + lts_aga_fm0_n0_p8_ilores_dlores_spr, + lts_aga_fm0_n1_p8_ilores_dlores_spr, + lts_aga_fm0_dpf0_p8_ilores_dlores_spr, + lts_aga_fm0_dpf1_p8_ilores_dlores_spr, + lts_aga_fm0_ehb0_p8_ilores_dlores_spr, + lts_aga_fm0_ehb1_p8_ilores_dlores_spr, + lts_aga_fm0_ham0_p8_ilores_dlores_spr, + lts_aga_fm0_ham1_p8_ilores_dlores_spr, + lts_aga_fm0_kehb0_p8_ilores_dlores_spr, + lts_aga_fm0_kehb1_p8_ilores_dlores_spr, + lts_aga_fm0_n0_p2_ihires_dlores, + lts_aga_fm0_n1_p2_ihires_dlores, + lts_aga_fm0_dpf0_p2_ihires_dlores, + lts_aga_fm0_dpf1_p2_ihires_dlores, + lts_aga_fm0_ehb0_p2_ihires_dlores, + lts_aga_fm0_ehb1_p2_ihires_dlores, + lts_aga_fm0_ham0_p2_ihires_dlores, + lts_aga_fm0_ham1_p2_ihires_dlores, + lts_aga_fm0_kehb0_p2_ihires_dlores, + lts_aga_fm0_kehb1_p2_ihires_dlores, + lts_aga_fm0_n0_p4_ihires_dlores, + lts_aga_fm0_n1_p4_ihires_dlores, + lts_aga_fm0_dpf0_p4_ihires_dlores, + lts_aga_fm0_dpf1_p4_ihires_dlores, + lts_aga_fm0_ehb0_p4_ihires_dlores, + lts_aga_fm0_ehb1_p4_ihires_dlores, + lts_aga_fm0_ham0_p4_ihires_dlores, + lts_aga_fm0_ham1_p4_ihires_dlores, + lts_aga_fm0_kehb0_p4_ihires_dlores, + lts_aga_fm0_kehb1_p4_ihires_dlores, + lts_aga_fm0_n0_p6_ihires_dlores, + lts_aga_fm0_n1_p6_ihires_dlores, + lts_aga_fm0_dpf0_p6_ihires_dlores, + lts_aga_fm0_dpf1_p6_ihires_dlores, + lts_aga_fm0_ehb0_p6_ihires_dlores, + lts_aga_fm0_ehb1_p6_ihires_dlores, + lts_aga_fm0_ham0_p6_ihires_dlores, + lts_aga_fm0_ham1_p6_ihires_dlores, + lts_aga_fm0_kehb0_p6_ihires_dlores, + lts_aga_fm0_kehb1_p6_ihires_dlores, + lts_aga_fm0_n0_p8_ihires_dlores, + lts_aga_fm0_n1_p8_ihires_dlores, + lts_aga_fm0_dpf0_p8_ihires_dlores, + lts_aga_fm0_dpf1_p8_ihires_dlores, + lts_aga_fm0_ehb0_p8_ihires_dlores, + lts_aga_fm0_ehb1_p8_ihires_dlores, + lts_aga_fm0_ham0_p8_ihires_dlores, + lts_aga_fm0_ham1_p8_ihires_dlores, + lts_aga_fm0_kehb0_p8_ihires_dlores, + lts_aga_fm0_kehb1_p8_ihires_dlores, + lts_aga_fm0_n0_p2_ihires_dlores_spr, + lts_aga_fm0_n1_p2_ihires_dlores_spr, + lts_aga_fm0_dpf0_p2_ihires_dlores_spr, + lts_aga_fm0_dpf1_p2_ihires_dlores_spr, + lts_aga_fm0_ehb0_p2_ihires_dlores_spr, + lts_aga_fm0_ehb1_p2_ihires_dlores_spr, + lts_aga_fm0_ham0_p2_ihires_dlores_spr, + lts_aga_fm0_ham1_p2_ihires_dlores_spr, + lts_aga_fm0_kehb0_p2_ihires_dlores_spr, + lts_aga_fm0_kehb1_p2_ihires_dlores_spr, + lts_aga_fm0_n0_p4_ihires_dlores_spr, + lts_aga_fm0_n1_p4_ihires_dlores_spr, + lts_aga_fm0_dpf0_p4_ihires_dlores_spr, + lts_aga_fm0_dpf1_p4_ihires_dlores_spr, + lts_aga_fm0_ehb0_p4_ihires_dlores_spr, + lts_aga_fm0_ehb1_p4_ihires_dlores_spr, + lts_aga_fm0_ham0_p4_ihires_dlores_spr, + lts_aga_fm0_ham1_p4_ihires_dlores_spr, + lts_aga_fm0_kehb0_p4_ihires_dlores_spr, + lts_aga_fm0_kehb1_p4_ihires_dlores_spr, + lts_aga_fm0_n0_p6_ihires_dlores_spr, + lts_aga_fm0_n1_p6_ihires_dlores_spr, + lts_aga_fm0_dpf0_p6_ihires_dlores_spr, + lts_aga_fm0_dpf1_p6_ihires_dlores_spr, + lts_aga_fm0_ehb0_p6_ihires_dlores_spr, + lts_aga_fm0_ehb1_p6_ihires_dlores_spr, + lts_aga_fm0_ham0_p6_ihires_dlores_spr, + lts_aga_fm0_ham1_p6_ihires_dlores_spr, + lts_aga_fm0_kehb0_p6_ihires_dlores_spr, + lts_aga_fm0_kehb1_p6_ihires_dlores_spr, + lts_aga_fm0_n0_p8_ihires_dlores_spr, + lts_aga_fm0_n1_p8_ihires_dlores_spr, + lts_aga_fm0_dpf0_p8_ihires_dlores_spr, + lts_aga_fm0_dpf1_p8_ihires_dlores_spr, + lts_aga_fm0_ehb0_p8_ihires_dlores_spr, + lts_aga_fm0_ehb1_p8_ihires_dlores_spr, + lts_aga_fm0_ham0_p8_ihires_dlores_spr, + lts_aga_fm0_ham1_p8_ihires_dlores_spr, + lts_aga_fm0_kehb0_p8_ihires_dlores_spr, + lts_aga_fm0_kehb1_p8_ihires_dlores_spr, + lts_aga_fm0_n0_p2_ishres_dlores, + lts_aga_fm0_n1_p2_ishres_dlores, + lts_aga_fm0_dpf0_p2_ishres_dlores, + lts_aga_fm0_dpf1_p2_ishres_dlores, + lts_aga_fm0_ehb0_p2_ishres_dlores, + lts_aga_fm0_ehb1_p2_ishres_dlores, + lts_aga_fm0_ham0_p2_ishres_dlores, + lts_aga_fm0_ham1_p2_ishres_dlores, + lts_aga_fm0_kehb0_p2_ishres_dlores, + lts_aga_fm0_kehb1_p2_ishres_dlores, + lts_aga_fm0_n0_p4_ishres_dlores, + lts_aga_fm0_n1_p4_ishres_dlores, + lts_aga_fm0_dpf0_p4_ishres_dlores, + lts_aga_fm0_dpf1_p4_ishres_dlores, + lts_aga_fm0_ehb0_p4_ishres_dlores, + lts_aga_fm0_ehb1_p4_ishres_dlores, + lts_aga_fm0_ham0_p4_ishres_dlores, + lts_aga_fm0_ham1_p4_ishres_dlores, + lts_aga_fm0_kehb0_p4_ishres_dlores, + lts_aga_fm0_kehb1_p4_ishres_dlores, + lts_aga_fm0_n0_p6_ishres_dlores, + lts_aga_fm0_n1_p6_ishres_dlores, + lts_aga_fm0_dpf0_p6_ishres_dlores, + lts_aga_fm0_dpf1_p6_ishres_dlores, + lts_aga_fm0_ehb0_p6_ishres_dlores, + lts_aga_fm0_ehb1_p6_ishres_dlores, + lts_aga_fm0_ham0_p6_ishres_dlores, + lts_aga_fm0_ham1_p6_ishres_dlores, + lts_aga_fm0_kehb0_p6_ishres_dlores, + lts_aga_fm0_kehb1_p6_ishres_dlores, + lts_aga_fm0_n0_p8_ishres_dlores, + lts_aga_fm0_n1_p8_ishres_dlores, + lts_aga_fm0_dpf0_p8_ishres_dlores, + lts_aga_fm0_dpf1_p8_ishres_dlores, + lts_aga_fm0_ehb0_p8_ishres_dlores, + lts_aga_fm0_ehb1_p8_ishres_dlores, + lts_aga_fm0_ham0_p8_ishres_dlores, + lts_aga_fm0_ham1_p8_ishres_dlores, + lts_aga_fm0_kehb0_p8_ishres_dlores, + lts_aga_fm0_kehb1_p8_ishres_dlores, + lts_aga_fm0_n0_p2_ishres_dlores_spr, + lts_aga_fm0_n1_p2_ishres_dlores_spr, + lts_aga_fm0_dpf0_p2_ishres_dlores_spr, + lts_aga_fm0_dpf1_p2_ishres_dlores_spr, + lts_aga_fm0_ehb0_p2_ishres_dlores_spr, + lts_aga_fm0_ehb1_p2_ishres_dlores_spr, + lts_aga_fm0_ham0_p2_ishres_dlores_spr, + lts_aga_fm0_ham1_p2_ishres_dlores_spr, + lts_aga_fm0_kehb0_p2_ishres_dlores_spr, + lts_aga_fm0_kehb1_p2_ishres_dlores_spr, + lts_aga_fm0_n0_p4_ishres_dlores_spr, + lts_aga_fm0_n1_p4_ishres_dlores_spr, + lts_aga_fm0_dpf0_p4_ishres_dlores_spr, + lts_aga_fm0_dpf1_p4_ishres_dlores_spr, + lts_aga_fm0_ehb0_p4_ishres_dlores_spr, + lts_aga_fm0_ehb1_p4_ishres_dlores_spr, + lts_aga_fm0_ham0_p4_ishres_dlores_spr, + lts_aga_fm0_ham1_p4_ishres_dlores_spr, + lts_aga_fm0_kehb0_p4_ishres_dlores_spr, + lts_aga_fm0_kehb1_p4_ishres_dlores_spr, + lts_aga_fm0_n0_p6_ishres_dlores_spr, + lts_aga_fm0_n1_p6_ishres_dlores_spr, + lts_aga_fm0_dpf0_p6_ishres_dlores_spr, + lts_aga_fm0_dpf1_p6_ishres_dlores_spr, + lts_aga_fm0_ehb0_p6_ishres_dlores_spr, + lts_aga_fm0_ehb1_p6_ishres_dlores_spr, + lts_aga_fm0_ham0_p6_ishres_dlores_spr, + lts_aga_fm0_ham1_p6_ishres_dlores_spr, + lts_aga_fm0_kehb0_p6_ishres_dlores_spr, + lts_aga_fm0_kehb1_p6_ishres_dlores_spr, + lts_aga_fm0_n0_p8_ishres_dlores_spr, + lts_aga_fm0_n1_p8_ishres_dlores_spr, + lts_aga_fm0_dpf0_p8_ishres_dlores_spr, + lts_aga_fm0_dpf1_p8_ishres_dlores_spr, + lts_aga_fm0_ehb0_p8_ishres_dlores_spr, + lts_aga_fm0_ehb1_p8_ishres_dlores_spr, + lts_aga_fm0_ham0_p8_ishres_dlores_spr, + lts_aga_fm0_ham1_p8_ishres_dlores_spr, + lts_aga_fm0_kehb0_p8_ishres_dlores_spr, + lts_aga_fm0_kehb1_p8_ishres_dlores_spr, + lts_aga_fm0_n0_p2_ilores_dhires, + lts_aga_fm0_n1_p2_ilores_dhires, + lts_aga_fm0_dpf0_p2_ilores_dhires, + lts_aga_fm0_dpf1_p2_ilores_dhires, + lts_aga_fm0_ehb0_p2_ilores_dhires, + lts_aga_fm0_ehb1_p2_ilores_dhires, + lts_aga_fm0_ham0_p2_ilores_dhires, + lts_aga_fm0_ham1_p2_ilores_dhires, + lts_aga_fm0_kehb0_p2_ilores_dhires, + lts_aga_fm0_kehb1_p2_ilores_dhires, + lts_aga_fm0_n0_p4_ilores_dhires, + lts_aga_fm0_n1_p4_ilores_dhires, + lts_aga_fm0_dpf0_p4_ilores_dhires, + lts_aga_fm0_dpf1_p4_ilores_dhires, + lts_aga_fm0_ehb0_p4_ilores_dhires, + lts_aga_fm0_ehb1_p4_ilores_dhires, + lts_aga_fm0_ham0_p4_ilores_dhires, + lts_aga_fm0_ham1_p4_ilores_dhires, + lts_aga_fm0_kehb0_p4_ilores_dhires, + lts_aga_fm0_kehb1_p4_ilores_dhires, + lts_aga_fm0_n0_p6_ilores_dhires, + lts_aga_fm0_n1_p6_ilores_dhires, + lts_aga_fm0_dpf0_p6_ilores_dhires, + lts_aga_fm0_dpf1_p6_ilores_dhires, + lts_aga_fm0_ehb0_p6_ilores_dhires, + lts_aga_fm0_ehb1_p6_ilores_dhires, + lts_aga_fm0_ham0_p6_ilores_dhires, + lts_aga_fm0_ham1_p6_ilores_dhires, + lts_aga_fm0_kehb0_p6_ilores_dhires, + lts_aga_fm0_kehb1_p6_ilores_dhires, + lts_aga_fm0_n0_p8_ilores_dhires, + lts_aga_fm0_n1_p8_ilores_dhires, + lts_aga_fm0_dpf0_p8_ilores_dhires, + lts_aga_fm0_dpf1_p8_ilores_dhires, + lts_aga_fm0_ehb0_p8_ilores_dhires, + lts_aga_fm0_ehb1_p8_ilores_dhires, + lts_aga_fm0_ham0_p8_ilores_dhires, + lts_aga_fm0_ham1_p8_ilores_dhires, + lts_aga_fm0_kehb0_p8_ilores_dhires, + lts_aga_fm0_kehb1_p8_ilores_dhires, + lts_aga_fm0_n0_p2_ilores_dhires_spr, + lts_aga_fm0_n1_p2_ilores_dhires_spr, + lts_aga_fm0_dpf0_p2_ilores_dhires_spr, + lts_aga_fm0_dpf1_p2_ilores_dhires_spr, + lts_aga_fm0_ehb0_p2_ilores_dhires_spr, + lts_aga_fm0_ehb1_p2_ilores_dhires_spr, + lts_aga_fm0_ham0_p2_ilores_dhires_spr, + lts_aga_fm0_ham1_p2_ilores_dhires_spr, + lts_aga_fm0_kehb0_p2_ilores_dhires_spr, + lts_aga_fm0_kehb1_p2_ilores_dhires_spr, + lts_aga_fm0_n0_p4_ilores_dhires_spr, + lts_aga_fm0_n1_p4_ilores_dhires_spr, + lts_aga_fm0_dpf0_p4_ilores_dhires_spr, + lts_aga_fm0_dpf1_p4_ilores_dhires_spr, + lts_aga_fm0_ehb0_p4_ilores_dhires_spr, + lts_aga_fm0_ehb1_p4_ilores_dhires_spr, + lts_aga_fm0_ham0_p4_ilores_dhires_spr, + lts_aga_fm0_ham1_p4_ilores_dhires_spr, + lts_aga_fm0_kehb0_p4_ilores_dhires_spr, + lts_aga_fm0_kehb1_p4_ilores_dhires_spr, + lts_aga_fm0_n0_p6_ilores_dhires_spr, + lts_aga_fm0_n1_p6_ilores_dhires_spr, + lts_aga_fm0_dpf0_p6_ilores_dhires_spr, + lts_aga_fm0_dpf1_p6_ilores_dhires_spr, + lts_aga_fm0_ehb0_p6_ilores_dhires_spr, + lts_aga_fm0_ehb1_p6_ilores_dhires_spr, + lts_aga_fm0_ham0_p6_ilores_dhires_spr, + lts_aga_fm0_ham1_p6_ilores_dhires_spr, + lts_aga_fm0_kehb0_p6_ilores_dhires_spr, + lts_aga_fm0_kehb1_p6_ilores_dhires_spr, + lts_aga_fm0_n0_p8_ilores_dhires_spr, + lts_aga_fm0_n1_p8_ilores_dhires_spr, + lts_aga_fm0_dpf0_p8_ilores_dhires_spr, + lts_aga_fm0_dpf1_p8_ilores_dhires_spr, + lts_aga_fm0_ehb0_p8_ilores_dhires_spr, + lts_aga_fm0_ehb1_p8_ilores_dhires_spr, + lts_aga_fm0_ham0_p8_ilores_dhires_spr, + lts_aga_fm0_ham1_p8_ilores_dhires_spr, + lts_aga_fm0_kehb0_p8_ilores_dhires_spr, + lts_aga_fm0_kehb1_p8_ilores_dhires_spr, + lts_aga_fm0_n0_p2_ihires_dhires, + lts_aga_fm0_n1_p2_ihires_dhires, + lts_aga_fm0_dpf0_p2_ihires_dhires, + lts_aga_fm0_dpf1_p2_ihires_dhires, + lts_aga_fm0_ehb0_p2_ihires_dhires, + lts_aga_fm0_ehb1_p2_ihires_dhires, + lts_aga_fm0_ham0_p2_ihires_dhires, + lts_aga_fm0_ham1_p2_ihires_dhires, + lts_aga_fm0_kehb0_p2_ihires_dhires, + lts_aga_fm0_kehb1_p2_ihires_dhires, + lts_aga_fm0_n0_p4_ihires_dhires, + lts_aga_fm0_n1_p4_ihires_dhires, + lts_aga_fm0_dpf0_p4_ihires_dhires, + lts_aga_fm0_dpf1_p4_ihires_dhires, + lts_aga_fm0_ehb0_p4_ihires_dhires, + lts_aga_fm0_ehb1_p4_ihires_dhires, + lts_aga_fm0_ham0_p4_ihires_dhires, + lts_aga_fm0_ham1_p4_ihires_dhires, + lts_aga_fm0_kehb0_p4_ihires_dhires, + lts_aga_fm0_kehb1_p4_ihires_dhires, + lts_aga_fm0_n0_p6_ihires_dhires, + lts_aga_fm0_n1_p6_ihires_dhires, + lts_aga_fm0_dpf0_p6_ihires_dhires, + lts_aga_fm0_dpf1_p6_ihires_dhires, + lts_aga_fm0_ehb0_p6_ihires_dhires, + lts_aga_fm0_ehb1_p6_ihires_dhires, + lts_aga_fm0_ham0_p6_ihires_dhires, + lts_aga_fm0_ham1_p6_ihires_dhires, + lts_aga_fm0_kehb0_p6_ihires_dhires, + lts_aga_fm0_kehb1_p6_ihires_dhires, + lts_aga_fm0_n0_p8_ihires_dhires, + lts_aga_fm0_n1_p8_ihires_dhires, + lts_aga_fm0_dpf0_p8_ihires_dhires, + lts_aga_fm0_dpf1_p8_ihires_dhires, + lts_aga_fm0_ehb0_p8_ihires_dhires, + lts_aga_fm0_ehb1_p8_ihires_dhires, + lts_aga_fm0_ham0_p8_ihires_dhires, + lts_aga_fm0_ham1_p8_ihires_dhires, + lts_aga_fm0_kehb0_p8_ihires_dhires, + lts_aga_fm0_kehb1_p8_ihires_dhires, + lts_aga_fm0_n0_p2_ihires_dhires_spr, + lts_aga_fm0_n1_p2_ihires_dhires_spr, + lts_aga_fm0_dpf0_p2_ihires_dhires_spr, + lts_aga_fm0_dpf1_p2_ihires_dhires_spr, + lts_aga_fm0_ehb0_p2_ihires_dhires_spr, + lts_aga_fm0_ehb1_p2_ihires_dhires_spr, + lts_aga_fm0_ham0_p2_ihires_dhires_spr, + lts_aga_fm0_ham1_p2_ihires_dhires_spr, + lts_aga_fm0_kehb0_p2_ihires_dhires_spr, + lts_aga_fm0_kehb1_p2_ihires_dhires_spr, + lts_aga_fm0_n0_p4_ihires_dhires_spr, + lts_aga_fm0_n1_p4_ihires_dhires_spr, + lts_aga_fm0_dpf0_p4_ihires_dhires_spr, + lts_aga_fm0_dpf1_p4_ihires_dhires_spr, + lts_aga_fm0_ehb0_p4_ihires_dhires_spr, + lts_aga_fm0_ehb1_p4_ihires_dhires_spr, + lts_aga_fm0_ham0_p4_ihires_dhires_spr, + lts_aga_fm0_ham1_p4_ihires_dhires_spr, + lts_aga_fm0_kehb0_p4_ihires_dhires_spr, + lts_aga_fm0_kehb1_p4_ihires_dhires_spr, + lts_aga_fm0_n0_p6_ihires_dhires_spr, + lts_aga_fm0_n1_p6_ihires_dhires_spr, + lts_aga_fm0_dpf0_p6_ihires_dhires_spr, + lts_aga_fm0_dpf1_p6_ihires_dhires_spr, + lts_aga_fm0_ehb0_p6_ihires_dhires_spr, + lts_aga_fm0_ehb1_p6_ihires_dhires_spr, + lts_aga_fm0_ham0_p6_ihires_dhires_spr, + lts_aga_fm0_ham1_p6_ihires_dhires_spr, + lts_aga_fm0_kehb0_p6_ihires_dhires_spr, + lts_aga_fm0_kehb1_p6_ihires_dhires_spr, + lts_aga_fm0_n0_p8_ihires_dhires_spr, + lts_aga_fm0_n1_p8_ihires_dhires_spr, + lts_aga_fm0_dpf0_p8_ihires_dhires_spr, + lts_aga_fm0_dpf1_p8_ihires_dhires_spr, + lts_aga_fm0_ehb0_p8_ihires_dhires_spr, + lts_aga_fm0_ehb1_p8_ihires_dhires_spr, + lts_aga_fm0_ham0_p8_ihires_dhires_spr, + lts_aga_fm0_ham1_p8_ihires_dhires_spr, + lts_aga_fm0_kehb0_p8_ihires_dhires_spr, + lts_aga_fm0_kehb1_p8_ihires_dhires_spr, + lts_aga_fm0_n0_p2_ishres_dhires, + lts_aga_fm0_n1_p2_ishres_dhires, + lts_aga_fm0_dpf0_p2_ishres_dhires, + lts_aga_fm0_dpf1_p2_ishres_dhires, + lts_aga_fm0_ehb0_p2_ishres_dhires, + lts_aga_fm0_ehb1_p2_ishres_dhires, + lts_aga_fm0_ham0_p2_ishres_dhires, + lts_aga_fm0_ham1_p2_ishres_dhires, + lts_aga_fm0_kehb0_p2_ishres_dhires, + lts_aga_fm0_kehb1_p2_ishres_dhires, + lts_aga_fm0_n0_p4_ishres_dhires, + lts_aga_fm0_n1_p4_ishres_dhires, + lts_aga_fm0_dpf0_p4_ishres_dhires, + lts_aga_fm0_dpf1_p4_ishres_dhires, + lts_aga_fm0_ehb0_p4_ishres_dhires, + lts_aga_fm0_ehb1_p4_ishres_dhires, + lts_aga_fm0_ham0_p4_ishres_dhires, + lts_aga_fm0_ham1_p4_ishres_dhires, + lts_aga_fm0_kehb0_p4_ishres_dhires, + lts_aga_fm0_kehb1_p4_ishres_dhires, + lts_aga_fm0_n0_p6_ishres_dhires, + lts_aga_fm0_n1_p6_ishres_dhires, + lts_aga_fm0_dpf0_p6_ishres_dhires, + lts_aga_fm0_dpf1_p6_ishres_dhires, + lts_aga_fm0_ehb0_p6_ishres_dhires, + lts_aga_fm0_ehb1_p6_ishres_dhires, + lts_aga_fm0_ham0_p6_ishres_dhires, + lts_aga_fm0_ham1_p6_ishres_dhires, + lts_aga_fm0_kehb0_p6_ishres_dhires, + lts_aga_fm0_kehb1_p6_ishres_dhires, + lts_aga_fm0_n0_p8_ishres_dhires, + lts_aga_fm0_n1_p8_ishres_dhires, + lts_aga_fm0_dpf0_p8_ishres_dhires, + lts_aga_fm0_dpf1_p8_ishres_dhires, + lts_aga_fm0_ehb0_p8_ishres_dhires, + lts_aga_fm0_ehb1_p8_ishres_dhires, + lts_aga_fm0_ham0_p8_ishres_dhires, + lts_aga_fm0_ham1_p8_ishres_dhires, + lts_aga_fm0_kehb0_p8_ishres_dhires, + lts_aga_fm0_kehb1_p8_ishres_dhires, + lts_aga_fm0_n0_p2_ishres_dhires_spr, + lts_aga_fm0_n1_p2_ishres_dhires_spr, + lts_aga_fm0_dpf0_p2_ishres_dhires_spr, + lts_aga_fm0_dpf1_p2_ishres_dhires_spr, + lts_aga_fm0_ehb0_p2_ishres_dhires_spr, + lts_aga_fm0_ehb1_p2_ishres_dhires_spr, + lts_aga_fm0_ham0_p2_ishres_dhires_spr, + lts_aga_fm0_ham1_p2_ishres_dhires_spr, + lts_aga_fm0_kehb0_p2_ishres_dhires_spr, + lts_aga_fm0_kehb1_p2_ishres_dhires_spr, + lts_aga_fm0_n0_p4_ishres_dhires_spr, + lts_aga_fm0_n1_p4_ishres_dhires_spr, + lts_aga_fm0_dpf0_p4_ishres_dhires_spr, + lts_aga_fm0_dpf1_p4_ishres_dhires_spr, + lts_aga_fm0_ehb0_p4_ishres_dhires_spr, + lts_aga_fm0_ehb1_p4_ishres_dhires_spr, + lts_aga_fm0_ham0_p4_ishres_dhires_spr, + lts_aga_fm0_ham1_p4_ishres_dhires_spr, + lts_aga_fm0_kehb0_p4_ishres_dhires_spr, + lts_aga_fm0_kehb1_p4_ishres_dhires_spr, + lts_aga_fm0_n0_p6_ishres_dhires_spr, + lts_aga_fm0_n1_p6_ishres_dhires_spr, + lts_aga_fm0_dpf0_p6_ishres_dhires_spr, + lts_aga_fm0_dpf1_p6_ishres_dhires_spr, + lts_aga_fm0_ehb0_p6_ishres_dhires_spr, + lts_aga_fm0_ehb1_p6_ishres_dhires_spr, + lts_aga_fm0_ham0_p6_ishres_dhires_spr, + lts_aga_fm0_ham1_p6_ishres_dhires_spr, + lts_aga_fm0_kehb0_p6_ishres_dhires_spr, + lts_aga_fm0_kehb1_p6_ishres_dhires_spr, + lts_aga_fm0_n0_p8_ishres_dhires_spr, + lts_aga_fm0_n1_p8_ishres_dhires_spr, + lts_aga_fm0_dpf0_p8_ishres_dhires_spr, + lts_aga_fm0_dpf1_p8_ishres_dhires_spr, + lts_aga_fm0_ehb0_p8_ishres_dhires_spr, + lts_aga_fm0_ehb1_p8_ishres_dhires_spr, + lts_aga_fm0_ham0_p8_ishres_dhires_spr, + lts_aga_fm0_ham1_p8_ishres_dhires_spr, + lts_aga_fm0_kehb0_p8_ishres_dhires_spr, + lts_aga_fm0_kehb1_p8_ishres_dhires_spr, + lts_aga_fm0_n0_p2_ilores_dshres, + lts_aga_fm0_n1_p2_ilores_dshres, + lts_aga_fm0_dpf0_p2_ilores_dshres, + lts_aga_fm0_dpf1_p2_ilores_dshres, + lts_aga_fm0_ehb0_p2_ilores_dshres, + lts_aga_fm0_ehb1_p2_ilores_dshres, + lts_aga_fm0_ham0_p2_ilores_dshres, + lts_aga_fm0_ham1_p2_ilores_dshres, + lts_aga_fm0_kehb0_p2_ilores_dshres, + lts_aga_fm0_kehb1_p2_ilores_dshres, + lts_aga_fm0_n0_p4_ilores_dshres, + lts_aga_fm0_n1_p4_ilores_dshres, + lts_aga_fm0_dpf0_p4_ilores_dshres, + lts_aga_fm0_dpf1_p4_ilores_dshres, + lts_aga_fm0_ehb0_p4_ilores_dshres, + lts_aga_fm0_ehb1_p4_ilores_dshres, + lts_aga_fm0_ham0_p4_ilores_dshres, + lts_aga_fm0_ham1_p4_ilores_dshres, + lts_aga_fm0_kehb0_p4_ilores_dshres, + lts_aga_fm0_kehb1_p4_ilores_dshres, + lts_aga_fm0_n0_p6_ilores_dshres, + lts_aga_fm0_n1_p6_ilores_dshres, + lts_aga_fm0_dpf0_p6_ilores_dshres, + lts_aga_fm0_dpf1_p6_ilores_dshres, + lts_aga_fm0_ehb0_p6_ilores_dshres, + lts_aga_fm0_ehb1_p6_ilores_dshres, + lts_aga_fm0_ham0_p6_ilores_dshres, + lts_aga_fm0_ham1_p6_ilores_dshres, + lts_aga_fm0_kehb0_p6_ilores_dshres, + lts_aga_fm0_kehb1_p6_ilores_dshres, + lts_aga_fm0_n0_p8_ilores_dshres, + lts_aga_fm0_n1_p8_ilores_dshres, + lts_aga_fm0_dpf0_p8_ilores_dshres, + lts_aga_fm0_dpf1_p8_ilores_dshres, + lts_aga_fm0_ehb0_p8_ilores_dshres, + lts_aga_fm0_ehb1_p8_ilores_dshres, + lts_aga_fm0_ham0_p8_ilores_dshres, + lts_aga_fm0_ham1_p8_ilores_dshres, + lts_aga_fm0_kehb0_p8_ilores_dshres, + lts_aga_fm0_kehb1_p8_ilores_dshres, + lts_aga_fm0_n0_p2_ilores_dshres_spr, + lts_aga_fm0_n1_p2_ilores_dshres_spr, + lts_aga_fm0_dpf0_p2_ilores_dshres_spr, + lts_aga_fm0_dpf1_p2_ilores_dshres_spr, + lts_aga_fm0_ehb0_p2_ilores_dshres_spr, + lts_aga_fm0_ehb1_p2_ilores_dshres_spr, + lts_aga_fm0_ham0_p2_ilores_dshres_spr, + lts_aga_fm0_ham1_p2_ilores_dshres_spr, + lts_aga_fm0_kehb0_p2_ilores_dshres_spr, + lts_aga_fm0_kehb1_p2_ilores_dshres_spr, + lts_aga_fm0_n0_p4_ilores_dshres_spr, + lts_aga_fm0_n1_p4_ilores_dshres_spr, + lts_aga_fm0_dpf0_p4_ilores_dshres_spr, + lts_aga_fm0_dpf1_p4_ilores_dshres_spr, + lts_aga_fm0_ehb0_p4_ilores_dshres_spr, + lts_aga_fm0_ehb1_p4_ilores_dshres_spr, + lts_aga_fm0_ham0_p4_ilores_dshres_spr, + lts_aga_fm0_ham1_p4_ilores_dshres_spr, + lts_aga_fm0_kehb0_p4_ilores_dshres_spr, + lts_aga_fm0_kehb1_p4_ilores_dshres_spr, + lts_aga_fm0_n0_p6_ilores_dshres_spr, + lts_aga_fm0_n1_p6_ilores_dshres_spr, + lts_aga_fm0_dpf0_p6_ilores_dshres_spr, + lts_aga_fm0_dpf1_p6_ilores_dshres_spr, + lts_aga_fm0_ehb0_p6_ilores_dshres_spr, + lts_aga_fm0_ehb1_p6_ilores_dshres_spr, + lts_aga_fm0_ham0_p6_ilores_dshres_spr, + lts_aga_fm0_ham1_p6_ilores_dshres_spr, + lts_aga_fm0_kehb0_p6_ilores_dshres_spr, + lts_aga_fm0_kehb1_p6_ilores_dshres_spr, + lts_aga_fm0_n0_p8_ilores_dshres_spr, + lts_aga_fm0_n1_p8_ilores_dshres_spr, + lts_aga_fm0_dpf0_p8_ilores_dshres_spr, + lts_aga_fm0_dpf1_p8_ilores_dshres_spr, + lts_aga_fm0_ehb0_p8_ilores_dshres_spr, + lts_aga_fm0_ehb1_p8_ilores_dshres_spr, + lts_aga_fm0_ham0_p8_ilores_dshres_spr, + lts_aga_fm0_ham1_p8_ilores_dshres_spr, + lts_aga_fm0_kehb0_p8_ilores_dshres_spr, + lts_aga_fm0_kehb1_p8_ilores_dshres_spr, + lts_aga_fm0_n0_p2_ihires_dshres, + lts_aga_fm0_n1_p2_ihires_dshres, + lts_aga_fm0_dpf0_p2_ihires_dshres, + lts_aga_fm0_dpf1_p2_ihires_dshres, + lts_aga_fm0_ehb0_p2_ihires_dshres, + lts_aga_fm0_ehb1_p2_ihires_dshres, + lts_aga_fm0_ham0_p2_ihires_dshres, + lts_aga_fm0_ham1_p2_ihires_dshres, + lts_aga_fm0_kehb0_p2_ihires_dshres, + lts_aga_fm0_kehb1_p2_ihires_dshres, + lts_aga_fm0_n0_p4_ihires_dshres, + lts_aga_fm0_n1_p4_ihires_dshres, + lts_aga_fm0_dpf0_p4_ihires_dshres, + lts_aga_fm0_dpf1_p4_ihires_dshres, + lts_aga_fm0_ehb0_p4_ihires_dshres, + lts_aga_fm0_ehb1_p4_ihires_dshres, + lts_aga_fm0_ham0_p4_ihires_dshres, + lts_aga_fm0_ham1_p4_ihires_dshres, + lts_aga_fm0_kehb0_p4_ihires_dshres, + lts_aga_fm0_kehb1_p4_ihires_dshres, + lts_aga_fm0_n0_p6_ihires_dshres, + lts_aga_fm0_n1_p6_ihires_dshres, + lts_aga_fm0_dpf0_p6_ihires_dshres, + lts_aga_fm0_dpf1_p6_ihires_dshres, + lts_aga_fm0_ehb0_p6_ihires_dshres, + lts_aga_fm0_ehb1_p6_ihires_dshres, + lts_aga_fm0_ham0_p6_ihires_dshres, + lts_aga_fm0_ham1_p6_ihires_dshres, + lts_aga_fm0_kehb0_p6_ihires_dshres, + lts_aga_fm0_kehb1_p6_ihires_dshres, + lts_aga_fm0_n0_p8_ihires_dshres, + lts_aga_fm0_n1_p8_ihires_dshres, + lts_aga_fm0_dpf0_p8_ihires_dshres, + lts_aga_fm0_dpf1_p8_ihires_dshres, + lts_aga_fm0_ehb0_p8_ihires_dshres, + lts_aga_fm0_ehb1_p8_ihires_dshres, + lts_aga_fm0_ham0_p8_ihires_dshres, + lts_aga_fm0_ham1_p8_ihires_dshres, + lts_aga_fm0_kehb0_p8_ihires_dshres, + lts_aga_fm0_kehb1_p8_ihires_dshres, + lts_aga_fm0_n0_p2_ihires_dshres_spr, + lts_aga_fm0_n1_p2_ihires_dshres_spr, + lts_aga_fm0_dpf0_p2_ihires_dshres_spr, + lts_aga_fm0_dpf1_p2_ihires_dshres_spr, + lts_aga_fm0_ehb0_p2_ihires_dshres_spr, + lts_aga_fm0_ehb1_p2_ihires_dshres_spr, + lts_aga_fm0_ham0_p2_ihires_dshres_spr, + lts_aga_fm0_ham1_p2_ihires_dshres_spr, + lts_aga_fm0_kehb0_p2_ihires_dshres_spr, + lts_aga_fm0_kehb1_p2_ihires_dshres_spr, + lts_aga_fm0_n0_p4_ihires_dshres_spr, + lts_aga_fm0_n1_p4_ihires_dshres_spr, + lts_aga_fm0_dpf0_p4_ihires_dshres_spr, + lts_aga_fm0_dpf1_p4_ihires_dshres_spr, + lts_aga_fm0_ehb0_p4_ihires_dshres_spr, + lts_aga_fm0_ehb1_p4_ihires_dshres_spr, + lts_aga_fm0_ham0_p4_ihires_dshres_spr, + lts_aga_fm0_ham1_p4_ihires_dshres_spr, + lts_aga_fm0_kehb0_p4_ihires_dshres_spr, + lts_aga_fm0_kehb1_p4_ihires_dshres_spr, + lts_aga_fm0_n0_p6_ihires_dshres_spr, + lts_aga_fm0_n1_p6_ihires_dshres_spr, + lts_aga_fm0_dpf0_p6_ihires_dshres_spr, + lts_aga_fm0_dpf1_p6_ihires_dshres_spr, + lts_aga_fm0_ehb0_p6_ihires_dshres_spr, + lts_aga_fm0_ehb1_p6_ihires_dshres_spr, + lts_aga_fm0_ham0_p6_ihires_dshres_spr, + lts_aga_fm0_ham1_p6_ihires_dshres_spr, + lts_aga_fm0_kehb0_p6_ihires_dshres_spr, + lts_aga_fm0_kehb1_p6_ihires_dshres_spr, + lts_aga_fm0_n0_p8_ihires_dshres_spr, + lts_aga_fm0_n1_p8_ihires_dshres_spr, + lts_aga_fm0_dpf0_p8_ihires_dshres_spr, + lts_aga_fm0_dpf1_p8_ihires_dshres_spr, + lts_aga_fm0_ehb0_p8_ihires_dshres_spr, + lts_aga_fm0_ehb1_p8_ihires_dshres_spr, + lts_aga_fm0_ham0_p8_ihires_dshres_spr, + lts_aga_fm0_ham1_p8_ihires_dshres_spr, + lts_aga_fm0_kehb0_p8_ihires_dshres_spr, + lts_aga_fm0_kehb1_p8_ihires_dshres_spr, + lts_aga_fm0_n0_p2_ishres_dshres, + lts_aga_fm0_n1_p2_ishres_dshres, + lts_aga_fm0_dpf0_p2_ishres_dshres, + lts_aga_fm0_dpf1_p2_ishres_dshres, + lts_aga_fm0_ehb0_p2_ishres_dshres, + lts_aga_fm0_ehb1_p2_ishres_dshres, + lts_aga_fm0_ham0_p2_ishres_dshres, + lts_aga_fm0_ham1_p2_ishres_dshres, + lts_aga_fm0_kehb0_p2_ishres_dshres, + lts_aga_fm0_kehb1_p2_ishres_dshres, + lts_aga_fm0_n0_p4_ishres_dshres, + lts_aga_fm0_n1_p4_ishres_dshres, + lts_aga_fm0_dpf0_p4_ishres_dshres, + lts_aga_fm0_dpf1_p4_ishres_dshres, + lts_aga_fm0_ehb0_p4_ishres_dshres, + lts_aga_fm0_ehb1_p4_ishres_dshres, + lts_aga_fm0_ham0_p4_ishres_dshres, + lts_aga_fm0_ham1_p4_ishres_dshres, + lts_aga_fm0_kehb0_p4_ishres_dshres, + lts_aga_fm0_kehb1_p4_ishres_dshres, + lts_aga_fm0_n0_p6_ishres_dshres, + lts_aga_fm0_n1_p6_ishres_dshres, + lts_aga_fm0_dpf0_p6_ishres_dshres, + lts_aga_fm0_dpf1_p6_ishres_dshres, + lts_aga_fm0_ehb0_p6_ishres_dshres, + lts_aga_fm0_ehb1_p6_ishres_dshres, + lts_aga_fm0_ham0_p6_ishres_dshres, + lts_aga_fm0_ham1_p6_ishres_dshres, + lts_aga_fm0_kehb0_p6_ishres_dshres, + lts_aga_fm0_kehb1_p6_ishres_dshres, + lts_aga_fm0_n0_p8_ishres_dshres, + lts_aga_fm0_n1_p8_ishres_dshres, + lts_aga_fm0_dpf0_p8_ishres_dshres, + lts_aga_fm0_dpf1_p8_ishres_dshres, + lts_aga_fm0_ehb0_p8_ishres_dshres, + lts_aga_fm0_ehb1_p8_ishres_dshres, + lts_aga_fm0_ham0_p8_ishres_dshres, + lts_aga_fm0_ham1_p8_ishres_dshres, + lts_aga_fm0_kehb0_p8_ishres_dshres, + lts_aga_fm0_kehb1_p8_ishres_dshres, + lts_aga_fm0_n0_p2_ishres_dshres_spr, + lts_aga_fm0_n1_p2_ishres_dshres_spr, + lts_aga_fm0_dpf0_p2_ishres_dshres_spr, + lts_aga_fm0_dpf1_p2_ishres_dshres_spr, + lts_aga_fm0_ehb0_p2_ishres_dshres_spr, + lts_aga_fm0_ehb1_p2_ishres_dshres_spr, + lts_aga_fm0_ham0_p2_ishres_dshres_spr, + lts_aga_fm0_ham1_p2_ishres_dshres_spr, + lts_aga_fm0_kehb0_p2_ishres_dshres_spr, + lts_aga_fm0_kehb1_p2_ishres_dshres_spr, + lts_aga_fm0_n0_p4_ishres_dshres_spr, + lts_aga_fm0_n1_p4_ishres_dshres_spr, + lts_aga_fm0_dpf0_p4_ishres_dshres_spr, + lts_aga_fm0_dpf1_p4_ishres_dshres_spr, + lts_aga_fm0_ehb0_p4_ishres_dshres_spr, + lts_aga_fm0_ehb1_p4_ishres_dshres_spr, + lts_aga_fm0_ham0_p4_ishres_dshres_spr, + lts_aga_fm0_ham1_p4_ishres_dshres_spr, + lts_aga_fm0_kehb0_p4_ishres_dshres_spr, + lts_aga_fm0_kehb1_p4_ishres_dshres_spr, + lts_aga_fm0_n0_p6_ishres_dshres_spr, + lts_aga_fm0_n1_p6_ishres_dshres_spr, + lts_aga_fm0_dpf0_p6_ishres_dshres_spr, + lts_aga_fm0_dpf1_p6_ishres_dshres_spr, + lts_aga_fm0_ehb0_p6_ishres_dshres_spr, + lts_aga_fm0_ehb1_p6_ishres_dshres_spr, + lts_aga_fm0_ham0_p6_ishres_dshres_spr, + lts_aga_fm0_ham1_p6_ishres_dshres_spr, + lts_aga_fm0_kehb0_p6_ishres_dshres_spr, + lts_aga_fm0_kehb1_p6_ishres_dshres_spr, + lts_aga_fm0_n0_p8_ishres_dshres_spr, + lts_aga_fm0_n1_p8_ishres_dshres_spr, + lts_aga_fm0_dpf0_p8_ishres_dshres_spr, + lts_aga_fm0_dpf1_p8_ishres_dshres_spr, + lts_aga_fm0_ehb0_p8_ishres_dshres_spr, + lts_aga_fm0_ehb1_p8_ishres_dshres_spr, + lts_aga_fm0_ham0_p8_ishres_dshres_spr, + lts_aga_fm0_ham1_p8_ishres_dshres_spr, + lts_aga_fm0_kehb0_p8_ishres_dshres_spr, + lts_aga_fm0_kehb1_p8_ishres_dshres_spr, + lts_aga_fm1_n0_p2_ilores_dlores, + lts_aga_fm1_n1_p2_ilores_dlores, + lts_aga_fm1_dpf0_p2_ilores_dlores, + lts_aga_fm1_dpf1_p2_ilores_dlores, + lts_aga_fm1_ehb0_p2_ilores_dlores, + lts_aga_fm1_ehb1_p2_ilores_dlores, + lts_aga_fm1_ham0_p2_ilores_dlores, + lts_aga_fm1_ham1_p2_ilores_dlores, + lts_aga_fm1_kehb0_p2_ilores_dlores, + lts_aga_fm1_kehb1_p2_ilores_dlores, + lts_aga_fm1_n0_p4_ilores_dlores, + lts_aga_fm1_n1_p4_ilores_dlores, + lts_aga_fm1_dpf0_p4_ilores_dlores, + lts_aga_fm1_dpf1_p4_ilores_dlores, + lts_aga_fm1_ehb0_p4_ilores_dlores, + lts_aga_fm1_ehb1_p4_ilores_dlores, + lts_aga_fm1_ham0_p4_ilores_dlores, + lts_aga_fm1_ham1_p4_ilores_dlores, + lts_aga_fm1_kehb0_p4_ilores_dlores, + lts_aga_fm1_kehb1_p4_ilores_dlores, + lts_aga_fm1_n0_p6_ilores_dlores, + lts_aga_fm1_n1_p6_ilores_dlores, + lts_aga_fm1_dpf0_p6_ilores_dlores, + lts_aga_fm1_dpf1_p6_ilores_dlores, + lts_aga_fm1_ehb0_p6_ilores_dlores, + lts_aga_fm1_ehb1_p6_ilores_dlores, + lts_aga_fm1_ham0_p6_ilores_dlores, + lts_aga_fm1_ham1_p6_ilores_dlores, + lts_aga_fm1_kehb0_p6_ilores_dlores, + lts_aga_fm1_kehb1_p6_ilores_dlores, + lts_aga_fm1_n0_p8_ilores_dlores, + lts_aga_fm1_n1_p8_ilores_dlores, + lts_aga_fm1_dpf0_p8_ilores_dlores, + lts_aga_fm1_dpf1_p8_ilores_dlores, + lts_aga_fm1_ehb0_p8_ilores_dlores, + lts_aga_fm1_ehb1_p8_ilores_dlores, + lts_aga_fm1_ham0_p8_ilores_dlores, + lts_aga_fm1_ham1_p8_ilores_dlores, + lts_aga_fm1_kehb0_p8_ilores_dlores, + lts_aga_fm1_kehb1_p8_ilores_dlores, + lts_aga_fm1_n0_p2_ilores_dlores_spr, + lts_aga_fm1_n1_p2_ilores_dlores_spr, + lts_aga_fm1_dpf0_p2_ilores_dlores_spr, + lts_aga_fm1_dpf1_p2_ilores_dlores_spr, + lts_aga_fm1_ehb0_p2_ilores_dlores_spr, + lts_aga_fm1_ehb1_p2_ilores_dlores_spr, + lts_aga_fm1_ham0_p2_ilores_dlores_spr, + lts_aga_fm1_ham1_p2_ilores_dlores_spr, + lts_aga_fm1_kehb0_p2_ilores_dlores_spr, + lts_aga_fm1_kehb1_p2_ilores_dlores_spr, + lts_aga_fm1_n0_p4_ilores_dlores_spr, + lts_aga_fm1_n1_p4_ilores_dlores_spr, + lts_aga_fm1_dpf0_p4_ilores_dlores_spr, + lts_aga_fm1_dpf1_p4_ilores_dlores_spr, + lts_aga_fm1_ehb0_p4_ilores_dlores_spr, + lts_aga_fm1_ehb1_p4_ilores_dlores_spr, + lts_aga_fm1_ham0_p4_ilores_dlores_spr, + lts_aga_fm1_ham1_p4_ilores_dlores_spr, + lts_aga_fm1_kehb0_p4_ilores_dlores_spr, + lts_aga_fm1_kehb1_p4_ilores_dlores_spr, + lts_aga_fm1_n0_p6_ilores_dlores_spr, + lts_aga_fm1_n1_p6_ilores_dlores_spr, + lts_aga_fm1_dpf0_p6_ilores_dlores_spr, + lts_aga_fm1_dpf1_p6_ilores_dlores_spr, + lts_aga_fm1_ehb0_p6_ilores_dlores_spr, + lts_aga_fm1_ehb1_p6_ilores_dlores_spr, + lts_aga_fm1_ham0_p6_ilores_dlores_spr, + lts_aga_fm1_ham1_p6_ilores_dlores_spr, + lts_aga_fm1_kehb0_p6_ilores_dlores_spr, + lts_aga_fm1_kehb1_p6_ilores_dlores_spr, + lts_aga_fm1_n0_p8_ilores_dlores_spr, + lts_aga_fm1_n1_p8_ilores_dlores_spr, + lts_aga_fm1_dpf0_p8_ilores_dlores_spr, + lts_aga_fm1_dpf1_p8_ilores_dlores_spr, + lts_aga_fm1_ehb0_p8_ilores_dlores_spr, + lts_aga_fm1_ehb1_p8_ilores_dlores_spr, + lts_aga_fm1_ham0_p8_ilores_dlores_spr, + lts_aga_fm1_ham1_p8_ilores_dlores_spr, + lts_aga_fm1_kehb0_p8_ilores_dlores_spr, + lts_aga_fm1_kehb1_p8_ilores_dlores_spr, + lts_aga_fm1_n0_p2_ihires_dlores, + lts_aga_fm1_n1_p2_ihires_dlores, + lts_aga_fm1_dpf0_p2_ihires_dlores, + lts_aga_fm1_dpf1_p2_ihires_dlores, + lts_aga_fm1_ehb0_p2_ihires_dlores, + lts_aga_fm1_ehb1_p2_ihires_dlores, + lts_aga_fm1_ham0_p2_ihires_dlores, + lts_aga_fm1_ham1_p2_ihires_dlores, + lts_aga_fm1_kehb0_p2_ihires_dlores, + lts_aga_fm1_kehb1_p2_ihires_dlores, + lts_aga_fm1_n0_p4_ihires_dlores, + lts_aga_fm1_n1_p4_ihires_dlores, + lts_aga_fm1_dpf0_p4_ihires_dlores, + lts_aga_fm1_dpf1_p4_ihires_dlores, + lts_aga_fm1_ehb0_p4_ihires_dlores, + lts_aga_fm1_ehb1_p4_ihires_dlores, + lts_aga_fm1_ham0_p4_ihires_dlores, + lts_aga_fm1_ham1_p4_ihires_dlores, + lts_aga_fm1_kehb0_p4_ihires_dlores, + lts_aga_fm1_kehb1_p4_ihires_dlores, + lts_aga_fm1_n0_p6_ihires_dlores, + lts_aga_fm1_n1_p6_ihires_dlores, + lts_aga_fm1_dpf0_p6_ihires_dlores, + lts_aga_fm1_dpf1_p6_ihires_dlores, + lts_aga_fm1_ehb0_p6_ihires_dlores, + lts_aga_fm1_ehb1_p6_ihires_dlores, + lts_aga_fm1_ham0_p6_ihires_dlores, + lts_aga_fm1_ham1_p6_ihires_dlores, + lts_aga_fm1_kehb0_p6_ihires_dlores, + lts_aga_fm1_kehb1_p6_ihires_dlores, + lts_aga_fm1_n0_p8_ihires_dlores, + lts_aga_fm1_n1_p8_ihires_dlores, + lts_aga_fm1_dpf0_p8_ihires_dlores, + lts_aga_fm1_dpf1_p8_ihires_dlores, + lts_aga_fm1_ehb0_p8_ihires_dlores, + lts_aga_fm1_ehb1_p8_ihires_dlores, + lts_aga_fm1_ham0_p8_ihires_dlores, + lts_aga_fm1_ham1_p8_ihires_dlores, + lts_aga_fm1_kehb0_p8_ihires_dlores, + lts_aga_fm1_kehb1_p8_ihires_dlores, + lts_aga_fm1_n0_p2_ihires_dlores_spr, + lts_aga_fm1_n1_p2_ihires_dlores_spr, + lts_aga_fm1_dpf0_p2_ihires_dlores_spr, + lts_aga_fm1_dpf1_p2_ihires_dlores_spr, + lts_aga_fm1_ehb0_p2_ihires_dlores_spr, + lts_aga_fm1_ehb1_p2_ihires_dlores_spr, + lts_aga_fm1_ham0_p2_ihires_dlores_spr, + lts_aga_fm1_ham1_p2_ihires_dlores_spr, + lts_aga_fm1_kehb0_p2_ihires_dlores_spr, + lts_aga_fm1_kehb1_p2_ihires_dlores_spr, + lts_aga_fm1_n0_p4_ihires_dlores_spr, + lts_aga_fm1_n1_p4_ihires_dlores_spr, + lts_aga_fm1_dpf0_p4_ihires_dlores_spr, + lts_aga_fm1_dpf1_p4_ihires_dlores_spr, + lts_aga_fm1_ehb0_p4_ihires_dlores_spr, + lts_aga_fm1_ehb1_p4_ihires_dlores_spr, + lts_aga_fm1_ham0_p4_ihires_dlores_spr, + lts_aga_fm1_ham1_p4_ihires_dlores_spr, + lts_aga_fm1_kehb0_p4_ihires_dlores_spr, + lts_aga_fm1_kehb1_p4_ihires_dlores_spr, + lts_aga_fm1_n0_p6_ihires_dlores_spr, + lts_aga_fm1_n1_p6_ihires_dlores_spr, + lts_aga_fm1_dpf0_p6_ihires_dlores_spr, + lts_aga_fm1_dpf1_p6_ihires_dlores_spr, + lts_aga_fm1_ehb0_p6_ihires_dlores_spr, + lts_aga_fm1_ehb1_p6_ihires_dlores_spr, + lts_aga_fm1_ham0_p6_ihires_dlores_spr, + lts_aga_fm1_ham1_p6_ihires_dlores_spr, + lts_aga_fm1_kehb0_p6_ihires_dlores_spr, + lts_aga_fm1_kehb1_p6_ihires_dlores_spr, + lts_aga_fm1_n0_p8_ihires_dlores_spr, + lts_aga_fm1_n1_p8_ihires_dlores_spr, + lts_aga_fm1_dpf0_p8_ihires_dlores_spr, + lts_aga_fm1_dpf1_p8_ihires_dlores_spr, + lts_aga_fm1_ehb0_p8_ihires_dlores_spr, + lts_aga_fm1_ehb1_p8_ihires_dlores_spr, + lts_aga_fm1_ham0_p8_ihires_dlores_spr, + lts_aga_fm1_ham1_p8_ihires_dlores_spr, + lts_aga_fm1_kehb0_p8_ihires_dlores_spr, + lts_aga_fm1_kehb1_p8_ihires_dlores_spr, + lts_aga_fm1_n0_p2_ishres_dlores, + lts_aga_fm1_n1_p2_ishres_dlores, + lts_aga_fm1_dpf0_p2_ishres_dlores, + lts_aga_fm1_dpf1_p2_ishres_dlores, + lts_aga_fm1_ehb0_p2_ishres_dlores, + lts_aga_fm1_ehb1_p2_ishres_dlores, + lts_aga_fm1_ham0_p2_ishres_dlores, + lts_aga_fm1_ham1_p2_ishres_dlores, + lts_aga_fm1_kehb0_p2_ishres_dlores, + lts_aga_fm1_kehb1_p2_ishres_dlores, + lts_aga_fm1_n0_p4_ishres_dlores, + lts_aga_fm1_n1_p4_ishres_dlores, + lts_aga_fm1_dpf0_p4_ishres_dlores, + lts_aga_fm1_dpf1_p4_ishres_dlores, + lts_aga_fm1_ehb0_p4_ishres_dlores, + lts_aga_fm1_ehb1_p4_ishres_dlores, + lts_aga_fm1_ham0_p4_ishres_dlores, + lts_aga_fm1_ham1_p4_ishres_dlores, + lts_aga_fm1_kehb0_p4_ishres_dlores, + lts_aga_fm1_kehb1_p4_ishres_dlores, + lts_aga_fm1_n0_p6_ishres_dlores, + lts_aga_fm1_n1_p6_ishres_dlores, + lts_aga_fm1_dpf0_p6_ishres_dlores, + lts_aga_fm1_dpf1_p6_ishres_dlores, + lts_aga_fm1_ehb0_p6_ishres_dlores, + lts_aga_fm1_ehb1_p6_ishres_dlores, + lts_aga_fm1_ham0_p6_ishres_dlores, + lts_aga_fm1_ham1_p6_ishres_dlores, + lts_aga_fm1_kehb0_p6_ishres_dlores, + lts_aga_fm1_kehb1_p6_ishres_dlores, + lts_aga_fm1_n0_p8_ishres_dlores, + lts_aga_fm1_n1_p8_ishres_dlores, + lts_aga_fm1_dpf0_p8_ishres_dlores, + lts_aga_fm1_dpf1_p8_ishres_dlores, + lts_aga_fm1_ehb0_p8_ishres_dlores, + lts_aga_fm1_ehb1_p8_ishres_dlores, + lts_aga_fm1_ham0_p8_ishres_dlores, + lts_aga_fm1_ham1_p8_ishres_dlores, + lts_aga_fm1_kehb0_p8_ishres_dlores, + lts_aga_fm1_kehb1_p8_ishres_dlores, + lts_aga_fm1_n0_p2_ishres_dlores_spr, + lts_aga_fm1_n1_p2_ishres_dlores_spr, + lts_aga_fm1_dpf0_p2_ishres_dlores_spr, + lts_aga_fm1_dpf1_p2_ishres_dlores_spr, + lts_aga_fm1_ehb0_p2_ishres_dlores_spr, + lts_aga_fm1_ehb1_p2_ishres_dlores_spr, + lts_aga_fm1_ham0_p2_ishres_dlores_spr, + lts_aga_fm1_ham1_p2_ishres_dlores_spr, + lts_aga_fm1_kehb0_p2_ishres_dlores_spr, + lts_aga_fm1_kehb1_p2_ishres_dlores_spr, + lts_aga_fm1_n0_p4_ishres_dlores_spr, + lts_aga_fm1_n1_p4_ishres_dlores_spr, + lts_aga_fm1_dpf0_p4_ishres_dlores_spr, + lts_aga_fm1_dpf1_p4_ishres_dlores_spr, + lts_aga_fm1_ehb0_p4_ishres_dlores_spr, + lts_aga_fm1_ehb1_p4_ishres_dlores_spr, + lts_aga_fm1_ham0_p4_ishres_dlores_spr, + lts_aga_fm1_ham1_p4_ishres_dlores_spr, + lts_aga_fm1_kehb0_p4_ishres_dlores_spr, + lts_aga_fm1_kehb1_p4_ishres_dlores_spr, + lts_aga_fm1_n0_p6_ishres_dlores_spr, + lts_aga_fm1_n1_p6_ishres_dlores_spr, + lts_aga_fm1_dpf0_p6_ishres_dlores_spr, + lts_aga_fm1_dpf1_p6_ishres_dlores_spr, + lts_aga_fm1_ehb0_p6_ishres_dlores_spr, + lts_aga_fm1_ehb1_p6_ishres_dlores_spr, + lts_aga_fm1_ham0_p6_ishres_dlores_spr, + lts_aga_fm1_ham1_p6_ishres_dlores_spr, + lts_aga_fm1_kehb0_p6_ishres_dlores_spr, + lts_aga_fm1_kehb1_p6_ishres_dlores_spr, + lts_aga_fm1_n0_p8_ishres_dlores_spr, + lts_aga_fm1_n1_p8_ishres_dlores_spr, + lts_aga_fm1_dpf0_p8_ishres_dlores_spr, + lts_aga_fm1_dpf1_p8_ishres_dlores_spr, + lts_aga_fm1_ehb0_p8_ishres_dlores_spr, + lts_aga_fm1_ehb1_p8_ishres_dlores_spr, + lts_aga_fm1_ham0_p8_ishres_dlores_spr, + lts_aga_fm1_ham1_p8_ishres_dlores_spr, + lts_aga_fm1_kehb0_p8_ishres_dlores_spr, + lts_aga_fm1_kehb1_p8_ishres_dlores_spr, + lts_aga_fm1_n0_p2_ilores_dhires, + lts_aga_fm1_n1_p2_ilores_dhires, + lts_aga_fm1_dpf0_p2_ilores_dhires, + lts_aga_fm1_dpf1_p2_ilores_dhires, + lts_aga_fm1_ehb0_p2_ilores_dhires, + lts_aga_fm1_ehb1_p2_ilores_dhires, + lts_aga_fm1_ham0_p2_ilores_dhires, + lts_aga_fm1_ham1_p2_ilores_dhires, + lts_aga_fm1_kehb0_p2_ilores_dhires, + lts_aga_fm1_kehb1_p2_ilores_dhires, + lts_aga_fm1_n0_p4_ilores_dhires, + lts_aga_fm1_n1_p4_ilores_dhires, + lts_aga_fm1_dpf0_p4_ilores_dhires, + lts_aga_fm1_dpf1_p4_ilores_dhires, + lts_aga_fm1_ehb0_p4_ilores_dhires, + lts_aga_fm1_ehb1_p4_ilores_dhires, + lts_aga_fm1_ham0_p4_ilores_dhires, + lts_aga_fm1_ham1_p4_ilores_dhires, + lts_aga_fm1_kehb0_p4_ilores_dhires, + lts_aga_fm1_kehb1_p4_ilores_dhires, + lts_aga_fm1_n0_p6_ilores_dhires, + lts_aga_fm1_n1_p6_ilores_dhires, + lts_aga_fm1_dpf0_p6_ilores_dhires, + lts_aga_fm1_dpf1_p6_ilores_dhires, + lts_aga_fm1_ehb0_p6_ilores_dhires, + lts_aga_fm1_ehb1_p6_ilores_dhires, + lts_aga_fm1_ham0_p6_ilores_dhires, + lts_aga_fm1_ham1_p6_ilores_dhires, + lts_aga_fm1_kehb0_p6_ilores_dhires, + lts_aga_fm1_kehb1_p6_ilores_dhires, + lts_aga_fm1_n0_p8_ilores_dhires, + lts_aga_fm1_n1_p8_ilores_dhires, + lts_aga_fm1_dpf0_p8_ilores_dhires, + lts_aga_fm1_dpf1_p8_ilores_dhires, + lts_aga_fm1_ehb0_p8_ilores_dhires, + lts_aga_fm1_ehb1_p8_ilores_dhires, + lts_aga_fm1_ham0_p8_ilores_dhires, + lts_aga_fm1_ham1_p8_ilores_dhires, + lts_aga_fm1_kehb0_p8_ilores_dhires, + lts_aga_fm1_kehb1_p8_ilores_dhires, + lts_aga_fm1_n0_p2_ilores_dhires_spr, + lts_aga_fm1_n1_p2_ilores_dhires_spr, + lts_aga_fm1_dpf0_p2_ilores_dhires_spr, + lts_aga_fm1_dpf1_p2_ilores_dhires_spr, + lts_aga_fm1_ehb0_p2_ilores_dhires_spr, + lts_aga_fm1_ehb1_p2_ilores_dhires_spr, + lts_aga_fm1_ham0_p2_ilores_dhires_spr, + lts_aga_fm1_ham1_p2_ilores_dhires_spr, + lts_aga_fm1_kehb0_p2_ilores_dhires_spr, + lts_aga_fm1_kehb1_p2_ilores_dhires_spr, + lts_aga_fm1_n0_p4_ilores_dhires_spr, + lts_aga_fm1_n1_p4_ilores_dhires_spr, + lts_aga_fm1_dpf0_p4_ilores_dhires_spr, + lts_aga_fm1_dpf1_p4_ilores_dhires_spr, + lts_aga_fm1_ehb0_p4_ilores_dhires_spr, + lts_aga_fm1_ehb1_p4_ilores_dhires_spr, + lts_aga_fm1_ham0_p4_ilores_dhires_spr, + lts_aga_fm1_ham1_p4_ilores_dhires_spr, + lts_aga_fm1_kehb0_p4_ilores_dhires_spr, + lts_aga_fm1_kehb1_p4_ilores_dhires_spr, + lts_aga_fm1_n0_p6_ilores_dhires_spr, + lts_aga_fm1_n1_p6_ilores_dhires_spr, + lts_aga_fm1_dpf0_p6_ilores_dhires_spr, + lts_aga_fm1_dpf1_p6_ilores_dhires_spr, + lts_aga_fm1_ehb0_p6_ilores_dhires_spr, + lts_aga_fm1_ehb1_p6_ilores_dhires_spr, + lts_aga_fm1_ham0_p6_ilores_dhires_spr, + lts_aga_fm1_ham1_p6_ilores_dhires_spr, + lts_aga_fm1_kehb0_p6_ilores_dhires_spr, + lts_aga_fm1_kehb1_p6_ilores_dhires_spr, + lts_aga_fm1_n0_p8_ilores_dhires_spr, + lts_aga_fm1_n1_p8_ilores_dhires_spr, + lts_aga_fm1_dpf0_p8_ilores_dhires_spr, + lts_aga_fm1_dpf1_p8_ilores_dhires_spr, + lts_aga_fm1_ehb0_p8_ilores_dhires_spr, + lts_aga_fm1_ehb1_p8_ilores_dhires_spr, + lts_aga_fm1_ham0_p8_ilores_dhires_spr, + lts_aga_fm1_ham1_p8_ilores_dhires_spr, + lts_aga_fm1_kehb0_p8_ilores_dhires_spr, + lts_aga_fm1_kehb1_p8_ilores_dhires_spr, + lts_aga_fm1_n0_p2_ihires_dhires, + lts_aga_fm1_n1_p2_ihires_dhires, + lts_aga_fm1_dpf0_p2_ihires_dhires, + lts_aga_fm1_dpf1_p2_ihires_dhires, + lts_aga_fm1_ehb0_p2_ihires_dhires, + lts_aga_fm1_ehb1_p2_ihires_dhires, + lts_aga_fm1_ham0_p2_ihires_dhires, + lts_aga_fm1_ham1_p2_ihires_dhires, + lts_aga_fm1_kehb0_p2_ihires_dhires, + lts_aga_fm1_kehb1_p2_ihires_dhires, + lts_aga_fm1_n0_p4_ihires_dhires, + lts_aga_fm1_n1_p4_ihires_dhires, + lts_aga_fm1_dpf0_p4_ihires_dhires, + lts_aga_fm1_dpf1_p4_ihires_dhires, + lts_aga_fm1_ehb0_p4_ihires_dhires, + lts_aga_fm1_ehb1_p4_ihires_dhires, + lts_aga_fm1_ham0_p4_ihires_dhires, + lts_aga_fm1_ham1_p4_ihires_dhires, + lts_aga_fm1_kehb0_p4_ihires_dhires, + lts_aga_fm1_kehb1_p4_ihires_dhires, + lts_aga_fm1_n0_p6_ihires_dhires, + lts_aga_fm1_n1_p6_ihires_dhires, + lts_aga_fm1_dpf0_p6_ihires_dhires, + lts_aga_fm1_dpf1_p6_ihires_dhires, + lts_aga_fm1_ehb0_p6_ihires_dhires, + lts_aga_fm1_ehb1_p6_ihires_dhires, + lts_aga_fm1_ham0_p6_ihires_dhires, + lts_aga_fm1_ham1_p6_ihires_dhires, + lts_aga_fm1_kehb0_p6_ihires_dhires, + lts_aga_fm1_kehb1_p6_ihires_dhires, + lts_aga_fm1_n0_p8_ihires_dhires, + lts_aga_fm1_n1_p8_ihires_dhires, + lts_aga_fm1_dpf0_p8_ihires_dhires, + lts_aga_fm1_dpf1_p8_ihires_dhires, + lts_aga_fm1_ehb0_p8_ihires_dhires, + lts_aga_fm1_ehb1_p8_ihires_dhires, + lts_aga_fm1_ham0_p8_ihires_dhires, + lts_aga_fm1_ham1_p8_ihires_dhires, + lts_aga_fm1_kehb0_p8_ihires_dhires, + lts_aga_fm1_kehb1_p8_ihires_dhires, + lts_aga_fm1_n0_p2_ihires_dhires_spr, + lts_aga_fm1_n1_p2_ihires_dhires_spr, + lts_aga_fm1_dpf0_p2_ihires_dhires_spr, + lts_aga_fm1_dpf1_p2_ihires_dhires_spr, + lts_aga_fm1_ehb0_p2_ihires_dhires_spr, + lts_aga_fm1_ehb1_p2_ihires_dhires_spr, + lts_aga_fm1_ham0_p2_ihires_dhires_spr, + lts_aga_fm1_ham1_p2_ihires_dhires_spr, + lts_aga_fm1_kehb0_p2_ihires_dhires_spr, + lts_aga_fm1_kehb1_p2_ihires_dhires_spr, + lts_aga_fm1_n0_p4_ihires_dhires_spr, + lts_aga_fm1_n1_p4_ihires_dhires_spr, + lts_aga_fm1_dpf0_p4_ihires_dhires_spr, + lts_aga_fm1_dpf1_p4_ihires_dhires_spr, + lts_aga_fm1_ehb0_p4_ihires_dhires_spr, + lts_aga_fm1_ehb1_p4_ihires_dhires_spr, + lts_aga_fm1_ham0_p4_ihires_dhires_spr, + lts_aga_fm1_ham1_p4_ihires_dhires_spr, + lts_aga_fm1_kehb0_p4_ihires_dhires_spr, + lts_aga_fm1_kehb1_p4_ihires_dhires_spr, + lts_aga_fm1_n0_p6_ihires_dhires_spr, + lts_aga_fm1_n1_p6_ihires_dhires_spr, + lts_aga_fm1_dpf0_p6_ihires_dhires_spr, + lts_aga_fm1_dpf1_p6_ihires_dhires_spr, + lts_aga_fm1_ehb0_p6_ihires_dhires_spr, + lts_aga_fm1_ehb1_p6_ihires_dhires_spr, + lts_aga_fm1_ham0_p6_ihires_dhires_spr, + lts_aga_fm1_ham1_p6_ihires_dhires_spr, + lts_aga_fm1_kehb0_p6_ihires_dhires_spr, + lts_aga_fm1_kehb1_p6_ihires_dhires_spr, + lts_aga_fm1_n0_p8_ihires_dhires_spr, + lts_aga_fm1_n1_p8_ihires_dhires_spr, + lts_aga_fm1_dpf0_p8_ihires_dhires_spr, + lts_aga_fm1_dpf1_p8_ihires_dhires_spr, + lts_aga_fm1_ehb0_p8_ihires_dhires_spr, + lts_aga_fm1_ehb1_p8_ihires_dhires_spr, + lts_aga_fm1_ham0_p8_ihires_dhires_spr, + lts_aga_fm1_ham1_p8_ihires_dhires_spr, + lts_aga_fm1_kehb0_p8_ihires_dhires_spr, + lts_aga_fm1_kehb1_p8_ihires_dhires_spr, + lts_aga_fm1_n0_p2_ishres_dhires, + lts_aga_fm1_n1_p2_ishres_dhires, + lts_aga_fm1_dpf0_p2_ishres_dhires, + lts_aga_fm1_dpf1_p2_ishres_dhires, + lts_aga_fm1_ehb0_p2_ishres_dhires, + lts_aga_fm1_ehb1_p2_ishres_dhires, + lts_aga_fm1_ham0_p2_ishres_dhires, + lts_aga_fm1_ham1_p2_ishres_dhires, + lts_aga_fm1_kehb0_p2_ishres_dhires, + lts_aga_fm1_kehb1_p2_ishres_dhires, + lts_aga_fm1_n0_p4_ishres_dhires, + lts_aga_fm1_n1_p4_ishres_dhires, + lts_aga_fm1_dpf0_p4_ishres_dhires, + lts_aga_fm1_dpf1_p4_ishres_dhires, + lts_aga_fm1_ehb0_p4_ishres_dhires, + lts_aga_fm1_ehb1_p4_ishres_dhires, + lts_aga_fm1_ham0_p4_ishres_dhires, + lts_aga_fm1_ham1_p4_ishres_dhires, + lts_aga_fm1_kehb0_p4_ishres_dhires, + lts_aga_fm1_kehb1_p4_ishres_dhires, + lts_aga_fm1_n0_p6_ishres_dhires, + lts_aga_fm1_n1_p6_ishres_dhires, + lts_aga_fm1_dpf0_p6_ishres_dhires, + lts_aga_fm1_dpf1_p6_ishres_dhires, + lts_aga_fm1_ehb0_p6_ishres_dhires, + lts_aga_fm1_ehb1_p6_ishres_dhires, + lts_aga_fm1_ham0_p6_ishres_dhires, + lts_aga_fm1_ham1_p6_ishres_dhires, + lts_aga_fm1_kehb0_p6_ishres_dhires, + lts_aga_fm1_kehb1_p6_ishres_dhires, + lts_aga_fm1_n0_p8_ishres_dhires, + lts_aga_fm1_n1_p8_ishres_dhires, + lts_aga_fm1_dpf0_p8_ishres_dhires, + lts_aga_fm1_dpf1_p8_ishres_dhires, + lts_aga_fm1_ehb0_p8_ishres_dhires, + lts_aga_fm1_ehb1_p8_ishres_dhires, + lts_aga_fm1_ham0_p8_ishres_dhires, + lts_aga_fm1_ham1_p8_ishres_dhires, + lts_aga_fm1_kehb0_p8_ishres_dhires, + lts_aga_fm1_kehb1_p8_ishres_dhires, + lts_aga_fm1_n0_p2_ishres_dhires_spr, + lts_aga_fm1_n1_p2_ishres_dhires_spr, + lts_aga_fm1_dpf0_p2_ishres_dhires_spr, + lts_aga_fm1_dpf1_p2_ishres_dhires_spr, + lts_aga_fm1_ehb0_p2_ishres_dhires_spr, + lts_aga_fm1_ehb1_p2_ishres_dhires_spr, + lts_aga_fm1_ham0_p2_ishres_dhires_spr, + lts_aga_fm1_ham1_p2_ishres_dhires_spr, + lts_aga_fm1_kehb0_p2_ishres_dhires_spr, + lts_aga_fm1_kehb1_p2_ishres_dhires_spr, + lts_aga_fm1_n0_p4_ishres_dhires_spr, + lts_aga_fm1_n1_p4_ishres_dhires_spr, + lts_aga_fm1_dpf0_p4_ishres_dhires_spr, + lts_aga_fm1_dpf1_p4_ishres_dhires_spr, + lts_aga_fm1_ehb0_p4_ishres_dhires_spr, + lts_aga_fm1_ehb1_p4_ishres_dhires_spr, + lts_aga_fm1_ham0_p4_ishres_dhires_spr, + lts_aga_fm1_ham1_p4_ishres_dhires_spr, + lts_aga_fm1_kehb0_p4_ishres_dhires_spr, + lts_aga_fm1_kehb1_p4_ishres_dhires_spr, + lts_aga_fm1_n0_p6_ishres_dhires_spr, + lts_aga_fm1_n1_p6_ishres_dhires_spr, + lts_aga_fm1_dpf0_p6_ishres_dhires_spr, + lts_aga_fm1_dpf1_p6_ishres_dhires_spr, + lts_aga_fm1_ehb0_p6_ishres_dhires_spr, + lts_aga_fm1_ehb1_p6_ishres_dhires_spr, + lts_aga_fm1_ham0_p6_ishres_dhires_spr, + lts_aga_fm1_ham1_p6_ishres_dhires_spr, + lts_aga_fm1_kehb0_p6_ishres_dhires_spr, + lts_aga_fm1_kehb1_p6_ishres_dhires_spr, + lts_aga_fm1_n0_p8_ishres_dhires_spr, + lts_aga_fm1_n1_p8_ishres_dhires_spr, + lts_aga_fm1_dpf0_p8_ishres_dhires_spr, + lts_aga_fm1_dpf1_p8_ishres_dhires_spr, + lts_aga_fm1_ehb0_p8_ishres_dhires_spr, + lts_aga_fm1_ehb1_p8_ishres_dhires_spr, + lts_aga_fm1_ham0_p8_ishres_dhires_spr, + lts_aga_fm1_ham1_p8_ishres_dhires_spr, + lts_aga_fm1_kehb0_p8_ishres_dhires_spr, + lts_aga_fm1_kehb1_p8_ishres_dhires_spr, + lts_aga_fm1_n0_p2_ilores_dshres, + lts_aga_fm1_n1_p2_ilores_dshres, + lts_aga_fm1_dpf0_p2_ilores_dshres, + lts_aga_fm1_dpf1_p2_ilores_dshres, + lts_aga_fm1_ehb0_p2_ilores_dshres, + lts_aga_fm1_ehb1_p2_ilores_dshres, + lts_aga_fm1_ham0_p2_ilores_dshres, + lts_aga_fm1_ham1_p2_ilores_dshres, + lts_aga_fm1_kehb0_p2_ilores_dshres, + lts_aga_fm1_kehb1_p2_ilores_dshres, + lts_aga_fm1_n0_p4_ilores_dshres, + lts_aga_fm1_n1_p4_ilores_dshres, + lts_aga_fm1_dpf0_p4_ilores_dshres, + lts_aga_fm1_dpf1_p4_ilores_dshres, + lts_aga_fm1_ehb0_p4_ilores_dshres, + lts_aga_fm1_ehb1_p4_ilores_dshres, + lts_aga_fm1_ham0_p4_ilores_dshres, + lts_aga_fm1_ham1_p4_ilores_dshres, + lts_aga_fm1_kehb0_p4_ilores_dshres, + lts_aga_fm1_kehb1_p4_ilores_dshres, + lts_aga_fm1_n0_p6_ilores_dshres, + lts_aga_fm1_n1_p6_ilores_dshres, + lts_aga_fm1_dpf0_p6_ilores_dshres, + lts_aga_fm1_dpf1_p6_ilores_dshres, + lts_aga_fm1_ehb0_p6_ilores_dshres, + lts_aga_fm1_ehb1_p6_ilores_dshres, + lts_aga_fm1_ham0_p6_ilores_dshres, + lts_aga_fm1_ham1_p6_ilores_dshres, + lts_aga_fm1_kehb0_p6_ilores_dshres, + lts_aga_fm1_kehb1_p6_ilores_dshres, + lts_aga_fm1_n0_p8_ilores_dshres, + lts_aga_fm1_n1_p8_ilores_dshres, + lts_aga_fm1_dpf0_p8_ilores_dshres, + lts_aga_fm1_dpf1_p8_ilores_dshres, + lts_aga_fm1_ehb0_p8_ilores_dshres, + lts_aga_fm1_ehb1_p8_ilores_dshres, + lts_aga_fm1_ham0_p8_ilores_dshres, + lts_aga_fm1_ham1_p8_ilores_dshres, + lts_aga_fm1_kehb0_p8_ilores_dshres, + lts_aga_fm1_kehb1_p8_ilores_dshres, + lts_aga_fm1_n0_p2_ilores_dshres_spr, + lts_aga_fm1_n1_p2_ilores_dshres_spr, + lts_aga_fm1_dpf0_p2_ilores_dshres_spr, + lts_aga_fm1_dpf1_p2_ilores_dshres_spr, + lts_aga_fm1_ehb0_p2_ilores_dshres_spr, + lts_aga_fm1_ehb1_p2_ilores_dshres_spr, + lts_aga_fm1_ham0_p2_ilores_dshres_spr, + lts_aga_fm1_ham1_p2_ilores_dshres_spr, + lts_aga_fm1_kehb0_p2_ilores_dshres_spr, + lts_aga_fm1_kehb1_p2_ilores_dshres_spr, + lts_aga_fm1_n0_p4_ilores_dshres_spr, + lts_aga_fm1_n1_p4_ilores_dshres_spr, + lts_aga_fm1_dpf0_p4_ilores_dshres_spr, + lts_aga_fm1_dpf1_p4_ilores_dshres_spr, + lts_aga_fm1_ehb0_p4_ilores_dshres_spr, + lts_aga_fm1_ehb1_p4_ilores_dshres_spr, + lts_aga_fm1_ham0_p4_ilores_dshres_spr, + lts_aga_fm1_ham1_p4_ilores_dshres_spr, + lts_aga_fm1_kehb0_p4_ilores_dshres_spr, + lts_aga_fm1_kehb1_p4_ilores_dshres_spr, + lts_aga_fm1_n0_p6_ilores_dshres_spr, + lts_aga_fm1_n1_p6_ilores_dshres_spr, + lts_aga_fm1_dpf0_p6_ilores_dshres_spr, + lts_aga_fm1_dpf1_p6_ilores_dshres_spr, + lts_aga_fm1_ehb0_p6_ilores_dshres_spr, + lts_aga_fm1_ehb1_p6_ilores_dshres_spr, + lts_aga_fm1_ham0_p6_ilores_dshres_spr, + lts_aga_fm1_ham1_p6_ilores_dshres_spr, + lts_aga_fm1_kehb0_p6_ilores_dshres_spr, + lts_aga_fm1_kehb1_p6_ilores_dshres_spr, + lts_aga_fm1_n0_p8_ilores_dshres_spr, + lts_aga_fm1_n1_p8_ilores_dshres_spr, + lts_aga_fm1_dpf0_p8_ilores_dshres_spr, + lts_aga_fm1_dpf1_p8_ilores_dshres_spr, + lts_aga_fm1_ehb0_p8_ilores_dshres_spr, + lts_aga_fm1_ehb1_p8_ilores_dshres_spr, + lts_aga_fm1_ham0_p8_ilores_dshres_spr, + lts_aga_fm1_ham1_p8_ilores_dshres_spr, + lts_aga_fm1_kehb0_p8_ilores_dshres_spr, + lts_aga_fm1_kehb1_p8_ilores_dshres_spr, + lts_aga_fm1_n0_p2_ihires_dshres, + lts_aga_fm1_n1_p2_ihires_dshres, + lts_aga_fm1_dpf0_p2_ihires_dshres, + lts_aga_fm1_dpf1_p2_ihires_dshres, + lts_aga_fm1_ehb0_p2_ihires_dshres, + lts_aga_fm1_ehb1_p2_ihires_dshres, + lts_aga_fm1_ham0_p2_ihires_dshres, + lts_aga_fm1_ham1_p2_ihires_dshres, + lts_aga_fm1_kehb0_p2_ihires_dshres, + lts_aga_fm1_kehb1_p2_ihires_dshres, + lts_aga_fm1_n0_p4_ihires_dshres, + lts_aga_fm1_n1_p4_ihires_dshres, + lts_aga_fm1_dpf0_p4_ihires_dshres, + lts_aga_fm1_dpf1_p4_ihires_dshres, + lts_aga_fm1_ehb0_p4_ihires_dshres, + lts_aga_fm1_ehb1_p4_ihires_dshres, + lts_aga_fm1_ham0_p4_ihires_dshres, + lts_aga_fm1_ham1_p4_ihires_dshres, + lts_aga_fm1_kehb0_p4_ihires_dshres, + lts_aga_fm1_kehb1_p4_ihires_dshres, + lts_aga_fm1_n0_p6_ihires_dshres, + lts_aga_fm1_n1_p6_ihires_dshres, + lts_aga_fm1_dpf0_p6_ihires_dshres, + lts_aga_fm1_dpf1_p6_ihires_dshres, + lts_aga_fm1_ehb0_p6_ihires_dshres, + lts_aga_fm1_ehb1_p6_ihires_dshres, + lts_aga_fm1_ham0_p6_ihires_dshres, + lts_aga_fm1_ham1_p6_ihires_dshres, + lts_aga_fm1_kehb0_p6_ihires_dshres, + lts_aga_fm1_kehb1_p6_ihires_dshres, + lts_aga_fm1_n0_p8_ihires_dshres, + lts_aga_fm1_n1_p8_ihires_dshres, + lts_aga_fm1_dpf0_p8_ihires_dshres, + lts_aga_fm1_dpf1_p8_ihires_dshres, + lts_aga_fm1_ehb0_p8_ihires_dshres, + lts_aga_fm1_ehb1_p8_ihires_dshres, + lts_aga_fm1_ham0_p8_ihires_dshres, + lts_aga_fm1_ham1_p8_ihires_dshres, + lts_aga_fm1_kehb0_p8_ihires_dshres, + lts_aga_fm1_kehb1_p8_ihires_dshres, + lts_aga_fm1_n0_p2_ihires_dshres_spr, + lts_aga_fm1_n1_p2_ihires_dshres_spr, + lts_aga_fm1_dpf0_p2_ihires_dshres_spr, + lts_aga_fm1_dpf1_p2_ihires_dshres_spr, + lts_aga_fm1_ehb0_p2_ihires_dshres_spr, + lts_aga_fm1_ehb1_p2_ihires_dshres_spr, + lts_aga_fm1_ham0_p2_ihires_dshres_spr, + lts_aga_fm1_ham1_p2_ihires_dshres_spr, + lts_aga_fm1_kehb0_p2_ihires_dshres_spr, + lts_aga_fm1_kehb1_p2_ihires_dshres_spr, + lts_aga_fm1_n0_p4_ihires_dshres_spr, + lts_aga_fm1_n1_p4_ihires_dshres_spr, + lts_aga_fm1_dpf0_p4_ihires_dshres_spr, + lts_aga_fm1_dpf1_p4_ihires_dshres_spr, + lts_aga_fm1_ehb0_p4_ihires_dshres_spr, + lts_aga_fm1_ehb1_p4_ihires_dshres_spr, + lts_aga_fm1_ham0_p4_ihires_dshres_spr, + lts_aga_fm1_ham1_p4_ihires_dshres_spr, + lts_aga_fm1_kehb0_p4_ihires_dshres_spr, + lts_aga_fm1_kehb1_p4_ihires_dshres_spr, + lts_aga_fm1_n0_p6_ihires_dshres_spr, + lts_aga_fm1_n1_p6_ihires_dshres_spr, + lts_aga_fm1_dpf0_p6_ihires_dshres_spr, + lts_aga_fm1_dpf1_p6_ihires_dshres_spr, + lts_aga_fm1_ehb0_p6_ihires_dshres_spr, + lts_aga_fm1_ehb1_p6_ihires_dshres_spr, + lts_aga_fm1_ham0_p6_ihires_dshres_spr, + lts_aga_fm1_ham1_p6_ihires_dshres_spr, + lts_aga_fm1_kehb0_p6_ihires_dshres_spr, + lts_aga_fm1_kehb1_p6_ihires_dshres_spr, + lts_aga_fm1_n0_p8_ihires_dshres_spr, + lts_aga_fm1_n1_p8_ihires_dshres_spr, + lts_aga_fm1_dpf0_p8_ihires_dshres_spr, + lts_aga_fm1_dpf1_p8_ihires_dshres_spr, + lts_aga_fm1_ehb0_p8_ihires_dshres_spr, + lts_aga_fm1_ehb1_p8_ihires_dshres_spr, + lts_aga_fm1_ham0_p8_ihires_dshres_spr, + lts_aga_fm1_ham1_p8_ihires_dshres_spr, + lts_aga_fm1_kehb0_p8_ihires_dshres_spr, + lts_aga_fm1_kehb1_p8_ihires_dshres_spr, + lts_aga_fm1_n0_p2_ishres_dshres, + lts_aga_fm1_n1_p2_ishres_dshres, + lts_aga_fm1_dpf0_p2_ishres_dshres, + lts_aga_fm1_dpf1_p2_ishres_dshres, + lts_aga_fm1_ehb0_p2_ishres_dshres, + lts_aga_fm1_ehb1_p2_ishres_dshres, + lts_aga_fm1_ham0_p2_ishres_dshres, + lts_aga_fm1_ham1_p2_ishres_dshres, + lts_aga_fm1_kehb0_p2_ishres_dshres, + lts_aga_fm1_kehb1_p2_ishres_dshres, + lts_aga_fm1_n0_p4_ishres_dshres, + lts_aga_fm1_n1_p4_ishres_dshres, + lts_aga_fm1_dpf0_p4_ishres_dshres, + lts_aga_fm1_dpf1_p4_ishres_dshres, + lts_aga_fm1_ehb0_p4_ishres_dshres, + lts_aga_fm1_ehb1_p4_ishres_dshres, + lts_aga_fm1_ham0_p4_ishres_dshres, + lts_aga_fm1_ham1_p4_ishres_dshres, + lts_aga_fm1_kehb0_p4_ishres_dshres, + lts_aga_fm1_kehb1_p4_ishres_dshres, + lts_aga_fm1_n0_p6_ishres_dshres, + lts_aga_fm1_n1_p6_ishres_dshres, + lts_aga_fm1_dpf0_p6_ishres_dshres, + lts_aga_fm1_dpf1_p6_ishres_dshres, + lts_aga_fm1_ehb0_p6_ishres_dshres, + lts_aga_fm1_ehb1_p6_ishres_dshres, + lts_aga_fm1_ham0_p6_ishres_dshres, + lts_aga_fm1_ham1_p6_ishres_dshres, + lts_aga_fm1_kehb0_p6_ishres_dshres, + lts_aga_fm1_kehb1_p6_ishres_dshres, + lts_aga_fm1_n0_p8_ishres_dshres, + lts_aga_fm1_n1_p8_ishres_dshres, + lts_aga_fm1_dpf0_p8_ishres_dshres, + lts_aga_fm1_dpf1_p8_ishres_dshres, + lts_aga_fm1_ehb0_p8_ishres_dshres, + lts_aga_fm1_ehb1_p8_ishres_dshres, + lts_aga_fm1_ham0_p8_ishres_dshres, + lts_aga_fm1_ham1_p8_ishres_dshres, + lts_aga_fm1_kehb0_p8_ishres_dshres, + lts_aga_fm1_kehb1_p8_ishres_dshres, + lts_aga_fm1_n0_p2_ishres_dshres_spr, + lts_aga_fm1_n1_p2_ishres_dshres_spr, + lts_aga_fm1_dpf0_p2_ishres_dshres_spr, + lts_aga_fm1_dpf1_p2_ishres_dshres_spr, + lts_aga_fm1_ehb0_p2_ishres_dshres_spr, + lts_aga_fm1_ehb1_p2_ishres_dshres_spr, + lts_aga_fm1_ham0_p2_ishres_dshres_spr, + lts_aga_fm1_ham1_p2_ishres_dshres_spr, + lts_aga_fm1_kehb0_p2_ishres_dshres_spr, + lts_aga_fm1_kehb1_p2_ishres_dshres_spr, + lts_aga_fm1_n0_p4_ishres_dshres_spr, + lts_aga_fm1_n1_p4_ishres_dshres_spr, + lts_aga_fm1_dpf0_p4_ishres_dshres_spr, + lts_aga_fm1_dpf1_p4_ishres_dshres_spr, + lts_aga_fm1_ehb0_p4_ishres_dshres_spr, + lts_aga_fm1_ehb1_p4_ishres_dshres_spr, + lts_aga_fm1_ham0_p4_ishres_dshres_spr, + lts_aga_fm1_ham1_p4_ishres_dshres_spr, + lts_aga_fm1_kehb0_p4_ishres_dshres_spr, + lts_aga_fm1_kehb1_p4_ishres_dshres_spr, + lts_aga_fm1_n0_p6_ishres_dshres_spr, + lts_aga_fm1_n1_p6_ishres_dshres_spr, + lts_aga_fm1_dpf0_p6_ishres_dshres_spr, + lts_aga_fm1_dpf1_p6_ishres_dshres_spr, + lts_aga_fm1_ehb0_p6_ishres_dshres_spr, + lts_aga_fm1_ehb1_p6_ishres_dshres_spr, + lts_aga_fm1_ham0_p6_ishres_dshres_spr, + lts_aga_fm1_ham1_p6_ishres_dshres_spr, + lts_aga_fm1_kehb0_p6_ishres_dshres_spr, + lts_aga_fm1_kehb1_p6_ishres_dshres_spr, + lts_aga_fm1_n0_p8_ishres_dshres_spr, + lts_aga_fm1_n1_p8_ishres_dshres_spr, + lts_aga_fm1_dpf0_p8_ishres_dshres_spr, + lts_aga_fm1_dpf1_p8_ishres_dshres_spr, + lts_aga_fm1_ehb0_p8_ishres_dshres_spr, + lts_aga_fm1_ehb1_p8_ishres_dshres_spr, + lts_aga_fm1_ham0_p8_ishres_dshres_spr, + lts_aga_fm1_ham1_p8_ishres_dshres_spr, + lts_aga_fm1_kehb0_p8_ishres_dshres_spr, + lts_aga_fm1_kehb1_p8_ishres_dshres_spr, + lts_aga_fm2_n0_p2_ilores_dlores, + lts_aga_fm2_n1_p2_ilores_dlores, + lts_aga_fm2_dpf0_p2_ilores_dlores, + lts_aga_fm2_dpf1_p2_ilores_dlores, + lts_aga_fm2_ehb0_p2_ilores_dlores, + lts_aga_fm2_ehb1_p2_ilores_dlores, + lts_aga_fm2_ham0_p2_ilores_dlores, + lts_aga_fm2_ham1_p2_ilores_dlores, + lts_aga_fm2_kehb0_p2_ilores_dlores, + lts_aga_fm2_kehb1_p2_ilores_dlores, + lts_aga_fm2_n0_p4_ilores_dlores, + lts_aga_fm2_n1_p4_ilores_dlores, + lts_aga_fm2_dpf0_p4_ilores_dlores, + lts_aga_fm2_dpf1_p4_ilores_dlores, + lts_aga_fm2_ehb0_p4_ilores_dlores, + lts_aga_fm2_ehb1_p4_ilores_dlores, + lts_aga_fm2_ham0_p4_ilores_dlores, + lts_aga_fm2_ham1_p4_ilores_dlores, + lts_aga_fm2_kehb0_p4_ilores_dlores, + lts_aga_fm2_kehb1_p4_ilores_dlores, + lts_aga_fm2_n0_p6_ilores_dlores, + lts_aga_fm2_n1_p6_ilores_dlores, + lts_aga_fm2_dpf0_p6_ilores_dlores, + lts_aga_fm2_dpf1_p6_ilores_dlores, + lts_aga_fm2_ehb0_p6_ilores_dlores, + lts_aga_fm2_ehb1_p6_ilores_dlores, + lts_aga_fm2_ham0_p6_ilores_dlores, + lts_aga_fm2_ham1_p6_ilores_dlores, + lts_aga_fm2_kehb0_p6_ilores_dlores, + lts_aga_fm2_kehb1_p6_ilores_dlores, + lts_aga_fm2_n0_p8_ilores_dlores, + lts_aga_fm2_n1_p8_ilores_dlores, + lts_aga_fm2_dpf0_p8_ilores_dlores, + lts_aga_fm2_dpf1_p8_ilores_dlores, + lts_aga_fm2_ehb0_p8_ilores_dlores, + lts_aga_fm2_ehb1_p8_ilores_dlores, + lts_aga_fm2_ham0_p8_ilores_dlores, + lts_aga_fm2_ham1_p8_ilores_dlores, + lts_aga_fm2_kehb0_p8_ilores_dlores, + lts_aga_fm2_kehb1_p8_ilores_dlores, + lts_aga_fm2_n0_p2_ilores_dlores_spr, + lts_aga_fm2_n1_p2_ilores_dlores_spr, + lts_aga_fm2_dpf0_p2_ilores_dlores_spr, + lts_aga_fm2_dpf1_p2_ilores_dlores_spr, + lts_aga_fm2_ehb0_p2_ilores_dlores_spr, + lts_aga_fm2_ehb1_p2_ilores_dlores_spr, + lts_aga_fm2_ham0_p2_ilores_dlores_spr, + lts_aga_fm2_ham1_p2_ilores_dlores_spr, + lts_aga_fm2_kehb0_p2_ilores_dlores_spr, + lts_aga_fm2_kehb1_p2_ilores_dlores_spr, + lts_aga_fm2_n0_p4_ilores_dlores_spr, + lts_aga_fm2_n1_p4_ilores_dlores_spr, + lts_aga_fm2_dpf0_p4_ilores_dlores_spr, + lts_aga_fm2_dpf1_p4_ilores_dlores_spr, + lts_aga_fm2_ehb0_p4_ilores_dlores_spr, + lts_aga_fm2_ehb1_p4_ilores_dlores_spr, + lts_aga_fm2_ham0_p4_ilores_dlores_spr, + lts_aga_fm2_ham1_p4_ilores_dlores_spr, + lts_aga_fm2_kehb0_p4_ilores_dlores_spr, + lts_aga_fm2_kehb1_p4_ilores_dlores_spr, + lts_aga_fm2_n0_p6_ilores_dlores_spr, + lts_aga_fm2_n1_p6_ilores_dlores_spr, + lts_aga_fm2_dpf0_p6_ilores_dlores_spr, + lts_aga_fm2_dpf1_p6_ilores_dlores_spr, + lts_aga_fm2_ehb0_p6_ilores_dlores_spr, + lts_aga_fm2_ehb1_p6_ilores_dlores_spr, + lts_aga_fm2_ham0_p6_ilores_dlores_spr, + lts_aga_fm2_ham1_p6_ilores_dlores_spr, + lts_aga_fm2_kehb0_p6_ilores_dlores_spr, + lts_aga_fm2_kehb1_p6_ilores_dlores_spr, + lts_aga_fm2_n0_p8_ilores_dlores_spr, + lts_aga_fm2_n1_p8_ilores_dlores_spr, + lts_aga_fm2_dpf0_p8_ilores_dlores_spr, + lts_aga_fm2_dpf1_p8_ilores_dlores_spr, + lts_aga_fm2_ehb0_p8_ilores_dlores_spr, + lts_aga_fm2_ehb1_p8_ilores_dlores_spr, + lts_aga_fm2_ham0_p8_ilores_dlores_spr, + lts_aga_fm2_ham1_p8_ilores_dlores_spr, + lts_aga_fm2_kehb0_p8_ilores_dlores_spr, + lts_aga_fm2_kehb1_p8_ilores_dlores_spr, + lts_aga_fm2_n0_p2_ihires_dlores, + lts_aga_fm2_n1_p2_ihires_dlores, + lts_aga_fm2_dpf0_p2_ihires_dlores, + lts_aga_fm2_dpf1_p2_ihires_dlores, + lts_aga_fm2_ehb0_p2_ihires_dlores, + lts_aga_fm2_ehb1_p2_ihires_dlores, + lts_aga_fm2_ham0_p2_ihires_dlores, + lts_aga_fm2_ham1_p2_ihires_dlores, + lts_aga_fm2_kehb0_p2_ihires_dlores, + lts_aga_fm2_kehb1_p2_ihires_dlores, + lts_aga_fm2_n0_p4_ihires_dlores, + lts_aga_fm2_n1_p4_ihires_dlores, + lts_aga_fm2_dpf0_p4_ihires_dlores, + lts_aga_fm2_dpf1_p4_ihires_dlores, + lts_aga_fm2_ehb0_p4_ihires_dlores, + lts_aga_fm2_ehb1_p4_ihires_dlores, + lts_aga_fm2_ham0_p4_ihires_dlores, + lts_aga_fm2_ham1_p4_ihires_dlores, + lts_aga_fm2_kehb0_p4_ihires_dlores, + lts_aga_fm2_kehb1_p4_ihires_dlores, + lts_aga_fm2_n0_p6_ihires_dlores, + lts_aga_fm2_n1_p6_ihires_dlores, + lts_aga_fm2_dpf0_p6_ihires_dlores, + lts_aga_fm2_dpf1_p6_ihires_dlores, + lts_aga_fm2_ehb0_p6_ihires_dlores, + lts_aga_fm2_ehb1_p6_ihires_dlores, + lts_aga_fm2_ham0_p6_ihires_dlores, + lts_aga_fm2_ham1_p6_ihires_dlores, + lts_aga_fm2_kehb0_p6_ihires_dlores, + lts_aga_fm2_kehb1_p6_ihires_dlores, + lts_aga_fm2_n0_p8_ihires_dlores, + lts_aga_fm2_n1_p8_ihires_dlores, + lts_aga_fm2_dpf0_p8_ihires_dlores, + lts_aga_fm2_dpf1_p8_ihires_dlores, + lts_aga_fm2_ehb0_p8_ihires_dlores, + lts_aga_fm2_ehb1_p8_ihires_dlores, + lts_aga_fm2_ham0_p8_ihires_dlores, + lts_aga_fm2_ham1_p8_ihires_dlores, + lts_aga_fm2_kehb0_p8_ihires_dlores, + lts_aga_fm2_kehb1_p8_ihires_dlores, + lts_aga_fm2_n0_p2_ihires_dlores_spr, + lts_aga_fm2_n1_p2_ihires_dlores_spr, + lts_aga_fm2_dpf0_p2_ihires_dlores_spr, + lts_aga_fm2_dpf1_p2_ihires_dlores_spr, + lts_aga_fm2_ehb0_p2_ihires_dlores_spr, + lts_aga_fm2_ehb1_p2_ihires_dlores_spr, + lts_aga_fm2_ham0_p2_ihires_dlores_spr, + lts_aga_fm2_ham1_p2_ihires_dlores_spr, + lts_aga_fm2_kehb0_p2_ihires_dlores_spr, + lts_aga_fm2_kehb1_p2_ihires_dlores_spr, + lts_aga_fm2_n0_p4_ihires_dlores_spr, + lts_aga_fm2_n1_p4_ihires_dlores_spr, + lts_aga_fm2_dpf0_p4_ihires_dlores_spr, + lts_aga_fm2_dpf1_p4_ihires_dlores_spr, + lts_aga_fm2_ehb0_p4_ihires_dlores_spr, + lts_aga_fm2_ehb1_p4_ihires_dlores_spr, + lts_aga_fm2_ham0_p4_ihires_dlores_spr, + lts_aga_fm2_ham1_p4_ihires_dlores_spr, + lts_aga_fm2_kehb0_p4_ihires_dlores_spr, + lts_aga_fm2_kehb1_p4_ihires_dlores_spr, + lts_aga_fm2_n0_p6_ihires_dlores_spr, + lts_aga_fm2_n1_p6_ihires_dlores_spr, + lts_aga_fm2_dpf0_p6_ihires_dlores_spr, + lts_aga_fm2_dpf1_p6_ihires_dlores_spr, + lts_aga_fm2_ehb0_p6_ihires_dlores_spr, + lts_aga_fm2_ehb1_p6_ihires_dlores_spr, + lts_aga_fm2_ham0_p6_ihires_dlores_spr, + lts_aga_fm2_ham1_p6_ihires_dlores_spr, + lts_aga_fm2_kehb0_p6_ihires_dlores_spr, + lts_aga_fm2_kehb1_p6_ihires_dlores_spr, + lts_aga_fm2_n0_p8_ihires_dlores_spr, + lts_aga_fm2_n1_p8_ihires_dlores_spr, + lts_aga_fm2_dpf0_p8_ihires_dlores_spr, + lts_aga_fm2_dpf1_p8_ihires_dlores_spr, + lts_aga_fm2_ehb0_p8_ihires_dlores_spr, + lts_aga_fm2_ehb1_p8_ihires_dlores_spr, + lts_aga_fm2_ham0_p8_ihires_dlores_spr, + lts_aga_fm2_ham1_p8_ihires_dlores_spr, + lts_aga_fm2_kehb0_p8_ihires_dlores_spr, + lts_aga_fm2_kehb1_p8_ihires_dlores_spr, + lts_aga_fm2_n0_p2_ishres_dlores, + lts_aga_fm2_n1_p2_ishres_dlores, + lts_aga_fm2_dpf0_p2_ishres_dlores, + lts_aga_fm2_dpf1_p2_ishres_dlores, + lts_aga_fm2_ehb0_p2_ishres_dlores, + lts_aga_fm2_ehb1_p2_ishres_dlores, + lts_aga_fm2_ham0_p2_ishres_dlores, + lts_aga_fm2_ham1_p2_ishres_dlores, + lts_aga_fm2_kehb0_p2_ishres_dlores, + lts_aga_fm2_kehb1_p2_ishres_dlores, + lts_aga_fm2_n0_p4_ishres_dlores, + lts_aga_fm2_n1_p4_ishres_dlores, + lts_aga_fm2_dpf0_p4_ishres_dlores, + lts_aga_fm2_dpf1_p4_ishres_dlores, + lts_aga_fm2_ehb0_p4_ishres_dlores, + lts_aga_fm2_ehb1_p4_ishres_dlores, + lts_aga_fm2_ham0_p4_ishres_dlores, + lts_aga_fm2_ham1_p4_ishres_dlores, + lts_aga_fm2_kehb0_p4_ishres_dlores, + lts_aga_fm2_kehb1_p4_ishres_dlores, + lts_aga_fm2_n0_p6_ishres_dlores, + lts_aga_fm2_n1_p6_ishres_dlores, + lts_aga_fm2_dpf0_p6_ishres_dlores, + lts_aga_fm2_dpf1_p6_ishres_dlores, + lts_aga_fm2_ehb0_p6_ishres_dlores, + lts_aga_fm2_ehb1_p6_ishres_dlores, + lts_aga_fm2_ham0_p6_ishres_dlores, + lts_aga_fm2_ham1_p6_ishres_dlores, + lts_aga_fm2_kehb0_p6_ishres_dlores, + lts_aga_fm2_kehb1_p6_ishres_dlores, + lts_aga_fm2_n0_p8_ishres_dlores, + lts_aga_fm2_n1_p8_ishres_dlores, + lts_aga_fm2_dpf0_p8_ishres_dlores, + lts_aga_fm2_dpf1_p8_ishres_dlores, + lts_aga_fm2_ehb0_p8_ishres_dlores, + lts_aga_fm2_ehb1_p8_ishres_dlores, + lts_aga_fm2_ham0_p8_ishres_dlores, + lts_aga_fm2_ham1_p8_ishres_dlores, + lts_aga_fm2_kehb0_p8_ishres_dlores, + lts_aga_fm2_kehb1_p8_ishres_dlores, + lts_aga_fm2_n0_p2_ishres_dlores_spr, + lts_aga_fm2_n1_p2_ishres_dlores_spr, + lts_aga_fm2_dpf0_p2_ishres_dlores_spr, + lts_aga_fm2_dpf1_p2_ishres_dlores_spr, + lts_aga_fm2_ehb0_p2_ishres_dlores_spr, + lts_aga_fm2_ehb1_p2_ishres_dlores_spr, + lts_aga_fm2_ham0_p2_ishres_dlores_spr, + lts_aga_fm2_ham1_p2_ishres_dlores_spr, + lts_aga_fm2_kehb0_p2_ishres_dlores_spr, + lts_aga_fm2_kehb1_p2_ishres_dlores_spr, + lts_aga_fm2_n0_p4_ishres_dlores_spr, + lts_aga_fm2_n1_p4_ishres_dlores_spr, + lts_aga_fm2_dpf0_p4_ishres_dlores_spr, + lts_aga_fm2_dpf1_p4_ishres_dlores_spr, + lts_aga_fm2_ehb0_p4_ishres_dlores_spr, + lts_aga_fm2_ehb1_p4_ishres_dlores_spr, + lts_aga_fm2_ham0_p4_ishres_dlores_spr, + lts_aga_fm2_ham1_p4_ishres_dlores_spr, + lts_aga_fm2_kehb0_p4_ishres_dlores_spr, + lts_aga_fm2_kehb1_p4_ishres_dlores_spr, + lts_aga_fm2_n0_p6_ishres_dlores_spr, + lts_aga_fm2_n1_p6_ishres_dlores_spr, + lts_aga_fm2_dpf0_p6_ishres_dlores_spr, + lts_aga_fm2_dpf1_p6_ishres_dlores_spr, + lts_aga_fm2_ehb0_p6_ishres_dlores_spr, + lts_aga_fm2_ehb1_p6_ishres_dlores_spr, + lts_aga_fm2_ham0_p6_ishres_dlores_spr, + lts_aga_fm2_ham1_p6_ishres_dlores_spr, + lts_aga_fm2_kehb0_p6_ishres_dlores_spr, + lts_aga_fm2_kehb1_p6_ishres_dlores_spr, + lts_aga_fm2_n0_p8_ishres_dlores_spr, + lts_aga_fm2_n1_p8_ishres_dlores_spr, + lts_aga_fm2_dpf0_p8_ishres_dlores_spr, + lts_aga_fm2_dpf1_p8_ishres_dlores_spr, + lts_aga_fm2_ehb0_p8_ishres_dlores_spr, + lts_aga_fm2_ehb1_p8_ishres_dlores_spr, + lts_aga_fm2_ham0_p8_ishres_dlores_spr, + lts_aga_fm2_ham1_p8_ishres_dlores_spr, + lts_aga_fm2_kehb0_p8_ishres_dlores_spr, + lts_aga_fm2_kehb1_p8_ishres_dlores_spr, + lts_aga_fm2_n0_p2_ilores_dhires, + lts_aga_fm2_n1_p2_ilores_dhires, + lts_aga_fm2_dpf0_p2_ilores_dhires, + lts_aga_fm2_dpf1_p2_ilores_dhires, + lts_aga_fm2_ehb0_p2_ilores_dhires, + lts_aga_fm2_ehb1_p2_ilores_dhires, + lts_aga_fm2_ham0_p2_ilores_dhires, + lts_aga_fm2_ham1_p2_ilores_dhires, + lts_aga_fm2_kehb0_p2_ilores_dhires, + lts_aga_fm2_kehb1_p2_ilores_dhires, + lts_aga_fm2_n0_p4_ilores_dhires, + lts_aga_fm2_n1_p4_ilores_dhires, + lts_aga_fm2_dpf0_p4_ilores_dhires, + lts_aga_fm2_dpf1_p4_ilores_dhires, + lts_aga_fm2_ehb0_p4_ilores_dhires, + lts_aga_fm2_ehb1_p4_ilores_dhires, + lts_aga_fm2_ham0_p4_ilores_dhires, + lts_aga_fm2_ham1_p4_ilores_dhires, + lts_aga_fm2_kehb0_p4_ilores_dhires, + lts_aga_fm2_kehb1_p4_ilores_dhires, + lts_aga_fm2_n0_p6_ilores_dhires, + lts_aga_fm2_n1_p6_ilores_dhires, + lts_aga_fm2_dpf0_p6_ilores_dhires, + lts_aga_fm2_dpf1_p6_ilores_dhires, + lts_aga_fm2_ehb0_p6_ilores_dhires, + lts_aga_fm2_ehb1_p6_ilores_dhires, + lts_aga_fm2_ham0_p6_ilores_dhires, + lts_aga_fm2_ham1_p6_ilores_dhires, + lts_aga_fm2_kehb0_p6_ilores_dhires, + lts_aga_fm2_kehb1_p6_ilores_dhires, + lts_aga_fm2_n0_p8_ilores_dhires, + lts_aga_fm2_n1_p8_ilores_dhires, + lts_aga_fm2_dpf0_p8_ilores_dhires, + lts_aga_fm2_dpf1_p8_ilores_dhires, + lts_aga_fm2_ehb0_p8_ilores_dhires, + lts_aga_fm2_ehb1_p8_ilores_dhires, + lts_aga_fm2_ham0_p8_ilores_dhires, + lts_aga_fm2_ham1_p8_ilores_dhires, + lts_aga_fm2_kehb0_p8_ilores_dhires, + lts_aga_fm2_kehb1_p8_ilores_dhires, + lts_aga_fm2_n0_p2_ilores_dhires_spr, + lts_aga_fm2_n1_p2_ilores_dhires_spr, + lts_aga_fm2_dpf0_p2_ilores_dhires_spr, + lts_aga_fm2_dpf1_p2_ilores_dhires_spr, + lts_aga_fm2_ehb0_p2_ilores_dhires_spr, + lts_aga_fm2_ehb1_p2_ilores_dhires_spr, + lts_aga_fm2_ham0_p2_ilores_dhires_spr, + lts_aga_fm2_ham1_p2_ilores_dhires_spr, + lts_aga_fm2_kehb0_p2_ilores_dhires_spr, + lts_aga_fm2_kehb1_p2_ilores_dhires_spr, + lts_aga_fm2_n0_p4_ilores_dhires_spr, + lts_aga_fm2_n1_p4_ilores_dhires_spr, + lts_aga_fm2_dpf0_p4_ilores_dhires_spr, + lts_aga_fm2_dpf1_p4_ilores_dhires_spr, + lts_aga_fm2_ehb0_p4_ilores_dhires_spr, + lts_aga_fm2_ehb1_p4_ilores_dhires_spr, + lts_aga_fm2_ham0_p4_ilores_dhires_spr, + lts_aga_fm2_ham1_p4_ilores_dhires_spr, + lts_aga_fm2_kehb0_p4_ilores_dhires_spr, + lts_aga_fm2_kehb1_p4_ilores_dhires_spr, + lts_aga_fm2_n0_p6_ilores_dhires_spr, + lts_aga_fm2_n1_p6_ilores_dhires_spr, + lts_aga_fm2_dpf0_p6_ilores_dhires_spr, + lts_aga_fm2_dpf1_p6_ilores_dhires_spr, + lts_aga_fm2_ehb0_p6_ilores_dhires_spr, + lts_aga_fm2_ehb1_p6_ilores_dhires_spr, + lts_aga_fm2_ham0_p6_ilores_dhires_spr, + lts_aga_fm2_ham1_p6_ilores_dhires_spr, + lts_aga_fm2_kehb0_p6_ilores_dhires_spr, + lts_aga_fm2_kehb1_p6_ilores_dhires_spr, + lts_aga_fm2_n0_p8_ilores_dhires_spr, + lts_aga_fm2_n1_p8_ilores_dhires_spr, + lts_aga_fm2_dpf0_p8_ilores_dhires_spr, + lts_aga_fm2_dpf1_p8_ilores_dhires_spr, + lts_aga_fm2_ehb0_p8_ilores_dhires_spr, + lts_aga_fm2_ehb1_p8_ilores_dhires_spr, + lts_aga_fm2_ham0_p8_ilores_dhires_spr, + lts_aga_fm2_ham1_p8_ilores_dhires_spr, + lts_aga_fm2_kehb0_p8_ilores_dhires_spr, + lts_aga_fm2_kehb1_p8_ilores_dhires_spr, + lts_aga_fm2_n0_p2_ihires_dhires, + lts_aga_fm2_n1_p2_ihires_dhires, + lts_aga_fm2_dpf0_p2_ihires_dhires, + lts_aga_fm2_dpf1_p2_ihires_dhires, + lts_aga_fm2_ehb0_p2_ihires_dhires, + lts_aga_fm2_ehb1_p2_ihires_dhires, + lts_aga_fm2_ham0_p2_ihires_dhires, + lts_aga_fm2_ham1_p2_ihires_dhires, + lts_aga_fm2_kehb0_p2_ihires_dhires, + lts_aga_fm2_kehb1_p2_ihires_dhires, + lts_aga_fm2_n0_p4_ihires_dhires, + lts_aga_fm2_n1_p4_ihires_dhires, + lts_aga_fm2_dpf0_p4_ihires_dhires, + lts_aga_fm2_dpf1_p4_ihires_dhires, + lts_aga_fm2_ehb0_p4_ihires_dhires, + lts_aga_fm2_ehb1_p4_ihires_dhires, + lts_aga_fm2_ham0_p4_ihires_dhires, + lts_aga_fm2_ham1_p4_ihires_dhires, + lts_aga_fm2_kehb0_p4_ihires_dhires, + lts_aga_fm2_kehb1_p4_ihires_dhires, + lts_aga_fm2_n0_p6_ihires_dhires, + lts_aga_fm2_n1_p6_ihires_dhires, + lts_aga_fm2_dpf0_p6_ihires_dhires, + lts_aga_fm2_dpf1_p6_ihires_dhires, + lts_aga_fm2_ehb0_p6_ihires_dhires, + lts_aga_fm2_ehb1_p6_ihires_dhires, + lts_aga_fm2_ham0_p6_ihires_dhires, + lts_aga_fm2_ham1_p6_ihires_dhires, + lts_aga_fm2_kehb0_p6_ihires_dhires, + lts_aga_fm2_kehb1_p6_ihires_dhires, + lts_aga_fm2_n0_p8_ihires_dhires, + lts_aga_fm2_n1_p8_ihires_dhires, + lts_aga_fm2_dpf0_p8_ihires_dhires, + lts_aga_fm2_dpf1_p8_ihires_dhires, + lts_aga_fm2_ehb0_p8_ihires_dhires, + lts_aga_fm2_ehb1_p8_ihires_dhires, + lts_aga_fm2_ham0_p8_ihires_dhires, + lts_aga_fm2_ham1_p8_ihires_dhires, + lts_aga_fm2_kehb0_p8_ihires_dhires, + lts_aga_fm2_kehb1_p8_ihires_dhires, + lts_aga_fm2_n0_p2_ihires_dhires_spr, + lts_aga_fm2_n1_p2_ihires_dhires_spr, + lts_aga_fm2_dpf0_p2_ihires_dhires_spr, + lts_aga_fm2_dpf1_p2_ihires_dhires_spr, + lts_aga_fm2_ehb0_p2_ihires_dhires_spr, + lts_aga_fm2_ehb1_p2_ihires_dhires_spr, + lts_aga_fm2_ham0_p2_ihires_dhires_spr, + lts_aga_fm2_ham1_p2_ihires_dhires_spr, + lts_aga_fm2_kehb0_p2_ihires_dhires_spr, + lts_aga_fm2_kehb1_p2_ihires_dhires_spr, + lts_aga_fm2_n0_p4_ihires_dhires_spr, + lts_aga_fm2_n1_p4_ihires_dhires_spr, + lts_aga_fm2_dpf0_p4_ihires_dhires_spr, + lts_aga_fm2_dpf1_p4_ihires_dhires_spr, + lts_aga_fm2_ehb0_p4_ihires_dhires_spr, + lts_aga_fm2_ehb1_p4_ihires_dhires_spr, + lts_aga_fm2_ham0_p4_ihires_dhires_spr, + lts_aga_fm2_ham1_p4_ihires_dhires_spr, + lts_aga_fm2_kehb0_p4_ihires_dhires_spr, + lts_aga_fm2_kehb1_p4_ihires_dhires_spr, + lts_aga_fm2_n0_p6_ihires_dhires_spr, + lts_aga_fm2_n1_p6_ihires_dhires_spr, + lts_aga_fm2_dpf0_p6_ihires_dhires_spr, + lts_aga_fm2_dpf1_p6_ihires_dhires_spr, + lts_aga_fm2_ehb0_p6_ihires_dhires_spr, + lts_aga_fm2_ehb1_p6_ihires_dhires_spr, + lts_aga_fm2_ham0_p6_ihires_dhires_spr, + lts_aga_fm2_ham1_p6_ihires_dhires_spr, + lts_aga_fm2_kehb0_p6_ihires_dhires_spr, + lts_aga_fm2_kehb1_p6_ihires_dhires_spr, + lts_aga_fm2_n0_p8_ihires_dhires_spr, + lts_aga_fm2_n1_p8_ihires_dhires_spr, + lts_aga_fm2_dpf0_p8_ihires_dhires_spr, + lts_aga_fm2_dpf1_p8_ihires_dhires_spr, + lts_aga_fm2_ehb0_p8_ihires_dhires_spr, + lts_aga_fm2_ehb1_p8_ihires_dhires_spr, + lts_aga_fm2_ham0_p8_ihires_dhires_spr, + lts_aga_fm2_ham1_p8_ihires_dhires_spr, + lts_aga_fm2_kehb0_p8_ihires_dhires_spr, + lts_aga_fm2_kehb1_p8_ihires_dhires_spr, + lts_aga_fm2_n0_p2_ishres_dhires, + lts_aga_fm2_n1_p2_ishres_dhires, + lts_aga_fm2_dpf0_p2_ishres_dhires, + lts_aga_fm2_dpf1_p2_ishres_dhires, + lts_aga_fm2_ehb0_p2_ishres_dhires, + lts_aga_fm2_ehb1_p2_ishres_dhires, + lts_aga_fm2_ham0_p2_ishres_dhires, + lts_aga_fm2_ham1_p2_ishres_dhires, + lts_aga_fm2_kehb0_p2_ishres_dhires, + lts_aga_fm2_kehb1_p2_ishres_dhires, + lts_aga_fm2_n0_p4_ishres_dhires, + lts_aga_fm2_n1_p4_ishres_dhires, + lts_aga_fm2_dpf0_p4_ishres_dhires, + lts_aga_fm2_dpf1_p4_ishres_dhires, + lts_aga_fm2_ehb0_p4_ishres_dhires, + lts_aga_fm2_ehb1_p4_ishres_dhires, + lts_aga_fm2_ham0_p4_ishres_dhires, + lts_aga_fm2_ham1_p4_ishres_dhires, + lts_aga_fm2_kehb0_p4_ishres_dhires, + lts_aga_fm2_kehb1_p4_ishres_dhires, + lts_aga_fm2_n0_p6_ishres_dhires, + lts_aga_fm2_n1_p6_ishres_dhires, + lts_aga_fm2_dpf0_p6_ishres_dhires, + lts_aga_fm2_dpf1_p6_ishres_dhires, + lts_aga_fm2_ehb0_p6_ishres_dhires, + lts_aga_fm2_ehb1_p6_ishres_dhires, + lts_aga_fm2_ham0_p6_ishres_dhires, + lts_aga_fm2_ham1_p6_ishres_dhires, + lts_aga_fm2_kehb0_p6_ishres_dhires, + lts_aga_fm2_kehb1_p6_ishres_dhires, + lts_aga_fm2_n0_p8_ishres_dhires, + lts_aga_fm2_n1_p8_ishres_dhires, + lts_aga_fm2_dpf0_p8_ishres_dhires, + lts_aga_fm2_dpf1_p8_ishres_dhires, + lts_aga_fm2_ehb0_p8_ishres_dhires, + lts_aga_fm2_ehb1_p8_ishres_dhires, + lts_aga_fm2_ham0_p8_ishres_dhires, + lts_aga_fm2_ham1_p8_ishres_dhires, + lts_aga_fm2_kehb0_p8_ishres_dhires, + lts_aga_fm2_kehb1_p8_ishres_dhires, + lts_aga_fm2_n0_p2_ishres_dhires_spr, + lts_aga_fm2_n1_p2_ishres_dhires_spr, + lts_aga_fm2_dpf0_p2_ishres_dhires_spr, + lts_aga_fm2_dpf1_p2_ishres_dhires_spr, + lts_aga_fm2_ehb0_p2_ishres_dhires_spr, + lts_aga_fm2_ehb1_p2_ishres_dhires_spr, + lts_aga_fm2_ham0_p2_ishres_dhires_spr, + lts_aga_fm2_ham1_p2_ishres_dhires_spr, + lts_aga_fm2_kehb0_p2_ishres_dhires_spr, + lts_aga_fm2_kehb1_p2_ishres_dhires_spr, + lts_aga_fm2_n0_p4_ishres_dhires_spr, + lts_aga_fm2_n1_p4_ishres_dhires_spr, + lts_aga_fm2_dpf0_p4_ishres_dhires_spr, + lts_aga_fm2_dpf1_p4_ishres_dhires_spr, + lts_aga_fm2_ehb0_p4_ishres_dhires_spr, + lts_aga_fm2_ehb1_p4_ishres_dhires_spr, + lts_aga_fm2_ham0_p4_ishres_dhires_spr, + lts_aga_fm2_ham1_p4_ishres_dhires_spr, + lts_aga_fm2_kehb0_p4_ishres_dhires_spr, + lts_aga_fm2_kehb1_p4_ishres_dhires_spr, + lts_aga_fm2_n0_p6_ishres_dhires_spr, + lts_aga_fm2_n1_p6_ishres_dhires_spr, + lts_aga_fm2_dpf0_p6_ishres_dhires_spr, + lts_aga_fm2_dpf1_p6_ishres_dhires_spr, + lts_aga_fm2_ehb0_p6_ishres_dhires_spr, + lts_aga_fm2_ehb1_p6_ishres_dhires_spr, + lts_aga_fm2_ham0_p6_ishres_dhires_spr, + lts_aga_fm2_ham1_p6_ishres_dhires_spr, + lts_aga_fm2_kehb0_p6_ishres_dhires_spr, + lts_aga_fm2_kehb1_p6_ishres_dhires_spr, + lts_aga_fm2_n0_p8_ishres_dhires_spr, + lts_aga_fm2_n1_p8_ishres_dhires_spr, + lts_aga_fm2_dpf0_p8_ishres_dhires_spr, + lts_aga_fm2_dpf1_p8_ishres_dhires_spr, + lts_aga_fm2_ehb0_p8_ishres_dhires_spr, + lts_aga_fm2_ehb1_p8_ishres_dhires_spr, + lts_aga_fm2_ham0_p8_ishres_dhires_spr, + lts_aga_fm2_ham1_p8_ishres_dhires_spr, + lts_aga_fm2_kehb0_p8_ishres_dhires_spr, + lts_aga_fm2_kehb1_p8_ishres_dhires_spr, + lts_aga_fm2_n0_p2_ilores_dshres, + lts_aga_fm2_n1_p2_ilores_dshres, + lts_aga_fm2_dpf0_p2_ilores_dshres, + lts_aga_fm2_dpf1_p2_ilores_dshres, + lts_aga_fm2_ehb0_p2_ilores_dshres, + lts_aga_fm2_ehb1_p2_ilores_dshres, + lts_aga_fm2_ham0_p2_ilores_dshres, + lts_aga_fm2_ham1_p2_ilores_dshres, + lts_aga_fm2_kehb0_p2_ilores_dshres, + lts_aga_fm2_kehb1_p2_ilores_dshres, + lts_aga_fm2_n0_p4_ilores_dshres, + lts_aga_fm2_n1_p4_ilores_dshres, + lts_aga_fm2_dpf0_p4_ilores_dshres, + lts_aga_fm2_dpf1_p4_ilores_dshres, + lts_aga_fm2_ehb0_p4_ilores_dshres, + lts_aga_fm2_ehb1_p4_ilores_dshres, + lts_aga_fm2_ham0_p4_ilores_dshres, + lts_aga_fm2_ham1_p4_ilores_dshres, + lts_aga_fm2_kehb0_p4_ilores_dshres, + lts_aga_fm2_kehb1_p4_ilores_dshres, + lts_aga_fm2_n0_p6_ilores_dshres, + lts_aga_fm2_n1_p6_ilores_dshres, + lts_aga_fm2_dpf0_p6_ilores_dshres, + lts_aga_fm2_dpf1_p6_ilores_dshres, + lts_aga_fm2_ehb0_p6_ilores_dshres, + lts_aga_fm2_ehb1_p6_ilores_dshres, + lts_aga_fm2_ham0_p6_ilores_dshres, + lts_aga_fm2_ham1_p6_ilores_dshres, + lts_aga_fm2_kehb0_p6_ilores_dshres, + lts_aga_fm2_kehb1_p6_ilores_dshres, + lts_aga_fm2_n0_p8_ilores_dshres, + lts_aga_fm2_n1_p8_ilores_dshres, + lts_aga_fm2_dpf0_p8_ilores_dshres, + lts_aga_fm2_dpf1_p8_ilores_dshres, + lts_aga_fm2_ehb0_p8_ilores_dshres, + lts_aga_fm2_ehb1_p8_ilores_dshres, + lts_aga_fm2_ham0_p8_ilores_dshres, + lts_aga_fm2_ham1_p8_ilores_dshres, + lts_aga_fm2_kehb0_p8_ilores_dshres, + lts_aga_fm2_kehb1_p8_ilores_dshres, + lts_aga_fm2_n0_p2_ilores_dshres_spr, + lts_aga_fm2_n1_p2_ilores_dshres_spr, + lts_aga_fm2_dpf0_p2_ilores_dshres_spr, + lts_aga_fm2_dpf1_p2_ilores_dshres_spr, + lts_aga_fm2_ehb0_p2_ilores_dshres_spr, + lts_aga_fm2_ehb1_p2_ilores_dshres_spr, + lts_aga_fm2_ham0_p2_ilores_dshres_spr, + lts_aga_fm2_ham1_p2_ilores_dshres_spr, + lts_aga_fm2_kehb0_p2_ilores_dshres_spr, + lts_aga_fm2_kehb1_p2_ilores_dshres_spr, + lts_aga_fm2_n0_p4_ilores_dshres_spr, + lts_aga_fm2_n1_p4_ilores_dshres_spr, + lts_aga_fm2_dpf0_p4_ilores_dshres_spr, + lts_aga_fm2_dpf1_p4_ilores_dshres_spr, + lts_aga_fm2_ehb0_p4_ilores_dshres_spr, + lts_aga_fm2_ehb1_p4_ilores_dshres_spr, + lts_aga_fm2_ham0_p4_ilores_dshres_spr, + lts_aga_fm2_ham1_p4_ilores_dshres_spr, + lts_aga_fm2_kehb0_p4_ilores_dshres_spr, + lts_aga_fm2_kehb1_p4_ilores_dshres_spr, + lts_aga_fm2_n0_p6_ilores_dshres_spr, + lts_aga_fm2_n1_p6_ilores_dshres_spr, + lts_aga_fm2_dpf0_p6_ilores_dshres_spr, + lts_aga_fm2_dpf1_p6_ilores_dshres_spr, + lts_aga_fm2_ehb0_p6_ilores_dshres_spr, + lts_aga_fm2_ehb1_p6_ilores_dshres_spr, + lts_aga_fm2_ham0_p6_ilores_dshres_spr, + lts_aga_fm2_ham1_p6_ilores_dshres_spr, + lts_aga_fm2_kehb0_p6_ilores_dshres_spr, + lts_aga_fm2_kehb1_p6_ilores_dshres_spr, + lts_aga_fm2_n0_p8_ilores_dshres_spr, + lts_aga_fm2_n1_p8_ilores_dshres_spr, + lts_aga_fm2_dpf0_p8_ilores_dshres_spr, + lts_aga_fm2_dpf1_p8_ilores_dshres_spr, + lts_aga_fm2_ehb0_p8_ilores_dshres_spr, + lts_aga_fm2_ehb1_p8_ilores_dshres_spr, + lts_aga_fm2_ham0_p8_ilores_dshres_spr, + lts_aga_fm2_ham1_p8_ilores_dshres_spr, + lts_aga_fm2_kehb0_p8_ilores_dshres_spr, + lts_aga_fm2_kehb1_p8_ilores_dshres_spr, + lts_aga_fm2_n0_p2_ihires_dshres, + lts_aga_fm2_n1_p2_ihires_dshres, + lts_aga_fm2_dpf0_p2_ihires_dshres, + lts_aga_fm2_dpf1_p2_ihires_dshres, + lts_aga_fm2_ehb0_p2_ihires_dshres, + lts_aga_fm2_ehb1_p2_ihires_dshres, + lts_aga_fm2_ham0_p2_ihires_dshres, + lts_aga_fm2_ham1_p2_ihires_dshres, + lts_aga_fm2_kehb0_p2_ihires_dshres, + lts_aga_fm2_kehb1_p2_ihires_dshres, + lts_aga_fm2_n0_p4_ihires_dshres, + lts_aga_fm2_n1_p4_ihires_dshres, + lts_aga_fm2_dpf0_p4_ihires_dshres, + lts_aga_fm2_dpf1_p4_ihires_dshres, + lts_aga_fm2_ehb0_p4_ihires_dshres, + lts_aga_fm2_ehb1_p4_ihires_dshres, + lts_aga_fm2_ham0_p4_ihires_dshres, + lts_aga_fm2_ham1_p4_ihires_dshres, + lts_aga_fm2_kehb0_p4_ihires_dshres, + lts_aga_fm2_kehb1_p4_ihires_dshres, + lts_aga_fm2_n0_p6_ihires_dshres, + lts_aga_fm2_n1_p6_ihires_dshres, + lts_aga_fm2_dpf0_p6_ihires_dshres, + lts_aga_fm2_dpf1_p6_ihires_dshres, + lts_aga_fm2_ehb0_p6_ihires_dshres, + lts_aga_fm2_ehb1_p6_ihires_dshres, + lts_aga_fm2_ham0_p6_ihires_dshres, + lts_aga_fm2_ham1_p6_ihires_dshres, + lts_aga_fm2_kehb0_p6_ihires_dshres, + lts_aga_fm2_kehb1_p6_ihires_dshres, + lts_aga_fm2_n0_p8_ihires_dshres, + lts_aga_fm2_n1_p8_ihires_dshres, + lts_aga_fm2_dpf0_p8_ihires_dshres, + lts_aga_fm2_dpf1_p8_ihires_dshres, + lts_aga_fm2_ehb0_p8_ihires_dshres, + lts_aga_fm2_ehb1_p8_ihires_dshres, + lts_aga_fm2_ham0_p8_ihires_dshres, + lts_aga_fm2_ham1_p8_ihires_dshres, + lts_aga_fm2_kehb0_p8_ihires_dshres, + lts_aga_fm2_kehb1_p8_ihires_dshres, + lts_aga_fm2_n0_p2_ihires_dshres_spr, + lts_aga_fm2_n1_p2_ihires_dshres_spr, + lts_aga_fm2_dpf0_p2_ihires_dshres_spr, + lts_aga_fm2_dpf1_p2_ihires_dshres_spr, + lts_aga_fm2_ehb0_p2_ihires_dshres_spr, + lts_aga_fm2_ehb1_p2_ihires_dshres_spr, + lts_aga_fm2_ham0_p2_ihires_dshres_spr, + lts_aga_fm2_ham1_p2_ihires_dshres_spr, + lts_aga_fm2_kehb0_p2_ihires_dshres_spr, + lts_aga_fm2_kehb1_p2_ihires_dshres_spr, + lts_aga_fm2_n0_p4_ihires_dshres_spr, + lts_aga_fm2_n1_p4_ihires_dshres_spr, + lts_aga_fm2_dpf0_p4_ihires_dshres_spr, + lts_aga_fm2_dpf1_p4_ihires_dshres_spr, + lts_aga_fm2_ehb0_p4_ihires_dshres_spr, + lts_aga_fm2_ehb1_p4_ihires_dshres_spr, + lts_aga_fm2_ham0_p4_ihires_dshres_spr, + lts_aga_fm2_ham1_p4_ihires_dshres_spr, + lts_aga_fm2_kehb0_p4_ihires_dshres_spr, + lts_aga_fm2_kehb1_p4_ihires_dshres_spr, + lts_aga_fm2_n0_p6_ihires_dshres_spr, + lts_aga_fm2_n1_p6_ihires_dshres_spr, + lts_aga_fm2_dpf0_p6_ihires_dshres_spr, + lts_aga_fm2_dpf1_p6_ihires_dshres_spr, + lts_aga_fm2_ehb0_p6_ihires_dshres_spr, + lts_aga_fm2_ehb1_p6_ihires_dshres_spr, + lts_aga_fm2_ham0_p6_ihires_dshres_spr, + lts_aga_fm2_ham1_p6_ihires_dshres_spr, + lts_aga_fm2_kehb0_p6_ihires_dshres_spr, + lts_aga_fm2_kehb1_p6_ihires_dshres_spr, + lts_aga_fm2_n0_p8_ihires_dshres_spr, + lts_aga_fm2_n1_p8_ihires_dshres_spr, + lts_aga_fm2_dpf0_p8_ihires_dshres_spr, + lts_aga_fm2_dpf1_p8_ihires_dshres_spr, + lts_aga_fm2_ehb0_p8_ihires_dshres_spr, + lts_aga_fm2_ehb1_p8_ihires_dshres_spr, + lts_aga_fm2_ham0_p8_ihires_dshres_spr, + lts_aga_fm2_ham1_p8_ihires_dshres_spr, + lts_aga_fm2_kehb0_p8_ihires_dshres_spr, + lts_aga_fm2_kehb1_p8_ihires_dshres_spr, + lts_aga_fm2_n0_p2_ishres_dshres, + lts_aga_fm2_n1_p2_ishres_dshres, + lts_aga_fm2_dpf0_p2_ishres_dshres, + lts_aga_fm2_dpf1_p2_ishres_dshres, + lts_aga_fm2_ehb0_p2_ishres_dshres, + lts_aga_fm2_ehb1_p2_ishres_dshres, + lts_aga_fm2_ham0_p2_ishres_dshres, + lts_aga_fm2_ham1_p2_ishres_dshres, + lts_aga_fm2_kehb0_p2_ishres_dshres, + lts_aga_fm2_kehb1_p2_ishres_dshres, + lts_aga_fm2_n0_p4_ishres_dshres, + lts_aga_fm2_n1_p4_ishres_dshres, + lts_aga_fm2_dpf0_p4_ishres_dshres, + lts_aga_fm2_dpf1_p4_ishres_dshres, + lts_aga_fm2_ehb0_p4_ishres_dshres, + lts_aga_fm2_ehb1_p4_ishres_dshres, + lts_aga_fm2_ham0_p4_ishres_dshres, + lts_aga_fm2_ham1_p4_ishres_dshres, + lts_aga_fm2_kehb0_p4_ishres_dshres, + lts_aga_fm2_kehb1_p4_ishres_dshres, + lts_aga_fm2_n0_p6_ishres_dshres, + lts_aga_fm2_n1_p6_ishres_dshres, + lts_aga_fm2_dpf0_p6_ishres_dshres, + lts_aga_fm2_dpf1_p6_ishres_dshres, + lts_aga_fm2_ehb0_p6_ishres_dshres, + lts_aga_fm2_ehb1_p6_ishres_dshres, + lts_aga_fm2_ham0_p6_ishres_dshres, + lts_aga_fm2_ham1_p6_ishres_dshres, + lts_aga_fm2_kehb0_p6_ishres_dshres, + lts_aga_fm2_kehb1_p6_ishres_dshres, + lts_aga_fm2_n0_p8_ishres_dshres, + lts_aga_fm2_n1_p8_ishres_dshres, + lts_aga_fm2_dpf0_p8_ishres_dshres, + lts_aga_fm2_dpf1_p8_ishres_dshres, + lts_aga_fm2_ehb0_p8_ishres_dshres, + lts_aga_fm2_ehb1_p8_ishres_dshres, + lts_aga_fm2_ham0_p8_ishres_dshres, + lts_aga_fm2_ham1_p8_ishres_dshres, + lts_aga_fm2_kehb0_p8_ishres_dshres, + lts_aga_fm2_kehb1_p8_ishres_dshres, + lts_aga_fm2_n0_p2_ishres_dshres_spr, + lts_aga_fm2_n1_p2_ishres_dshres_spr, + lts_aga_fm2_dpf0_p2_ishres_dshres_spr, + lts_aga_fm2_dpf1_p2_ishres_dshres_spr, + lts_aga_fm2_ehb0_p2_ishres_dshres_spr, + lts_aga_fm2_ehb1_p2_ishres_dshres_spr, + lts_aga_fm2_ham0_p2_ishres_dshres_spr, + lts_aga_fm2_ham1_p2_ishres_dshres_spr, + lts_aga_fm2_kehb0_p2_ishres_dshres_spr, + lts_aga_fm2_kehb1_p2_ishres_dshres_spr, + lts_aga_fm2_n0_p4_ishres_dshres_spr, + lts_aga_fm2_n1_p4_ishres_dshres_spr, + lts_aga_fm2_dpf0_p4_ishres_dshres_spr, + lts_aga_fm2_dpf1_p4_ishres_dshres_spr, + lts_aga_fm2_ehb0_p4_ishres_dshres_spr, + lts_aga_fm2_ehb1_p4_ishres_dshres_spr, + lts_aga_fm2_ham0_p4_ishres_dshres_spr, + lts_aga_fm2_ham1_p4_ishres_dshres_spr, + lts_aga_fm2_kehb0_p4_ishres_dshres_spr, + lts_aga_fm2_kehb1_p4_ishres_dshres_spr, + lts_aga_fm2_n0_p6_ishres_dshres_spr, + lts_aga_fm2_n1_p6_ishres_dshres_spr, + lts_aga_fm2_dpf0_p6_ishres_dshres_spr, + lts_aga_fm2_dpf1_p6_ishres_dshres_spr, + lts_aga_fm2_ehb0_p6_ishres_dshres_spr, + lts_aga_fm2_ehb1_p6_ishres_dshres_spr, + lts_aga_fm2_ham0_p6_ishres_dshres_spr, + lts_aga_fm2_ham1_p6_ishres_dshres_spr, + lts_aga_fm2_kehb0_p6_ishres_dshres_spr, + lts_aga_fm2_kehb1_p6_ishres_dshres_spr, + lts_aga_fm2_n0_p8_ishres_dshres_spr, + lts_aga_fm2_n1_p8_ishres_dshres_spr, + lts_aga_fm2_dpf0_p8_ishres_dshres_spr, + lts_aga_fm2_dpf1_p8_ishres_dshres_spr, + lts_aga_fm2_ehb0_p8_ishres_dshres_spr, + lts_aga_fm2_ehb1_p8_ishres_dshres_spr, + lts_aga_fm2_ham0_p8_ishres_dshres_spr, + lts_aga_fm2_ham1_p8_ishres_dshres_spr, + lts_aga_fm2_kehb0_p8_ishres_dshres_spr, + lts_aga_fm2_kehb1_p8_ishres_dshres_spr, +}; diff --git a/linetoscr_aga_fm2_genlock.cpp b/linetoscr_aga_fm2_genlock.cpp new file mode 100644 index 00000000..140506d2 --- /dev/null +++ b/linetoscr_aga_fm2_genlock.cpp @@ -0,0 +1,27448 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_aga_fm2_n0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dlores_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + shiftbpl4_64(); + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + shiftbpl8_64(); + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + decode_ham_pixel_aga(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dhires_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl4_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl4_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + shiftbpl8_64(); + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + shiftbpl8_64(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + decode_ham_pixel_aga(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + decode_ham_pixel_aga(pix3); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 1; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 1; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 255) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ilores_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl4e_64(); + loaded_pix = getbpl4_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl4o_64(); + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl4_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl4_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + bplshiftcnt[0] += 2; + if (bplshiftcnt[0] >= 4) { + bplshiftcnt[0] = 0; + shiftbpl8e_64(); + loaded_pix = getbpl8_64(); + } + bplshiftcnt[1] += 2; + if (bplshiftcnt[1] >= 4) { + bplshiftcnt[1] = 0; + shiftbpl8o_64(); + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[0] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + bplshiftcnt[0] = 0; + loaded_pix = getbpl8_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 127) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + bplshiftcnt[1] = 0; + loaded_pix = getbpl8_64(); + } + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[0] = loaded_pix; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[1] = loaded_pix; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[2] = loaded_pix; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dshres_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p4_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl4_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl4e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl4o_64(); + } + loaded_pix = getbpl4_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb0_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p4_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_n0_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_n1_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0 ^ bplcon4_denise_xor_val]; + gpix0 = get_genlock_transparency(pix0 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1 ^ bplcon4_denise_xor_val]; + gpix1 = get_genlock_transparency(pix1 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2 ^ bplcon4_denise_xor_val]; + gpix2 = get_genlock_transparency(pix2 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = denise_colors.acolors[pix3 ^ bplcon4_denise_xor_val]; + gpix3 = get_genlock_transparency(pix3 ^ bplcon4_denise_xor_val); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf0_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_dpf1_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + if (dpf_lookup_no[pix0]) { + val0 += dblpfofs[bpldualpf2of]; + } + val0 ^= bplcon4_denise_xor_val; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + if (dpf_lookup_no[pix1]) { + val1 += dblpfofs[bpldualpf2of]; + } + val1 ^= bplcon4_denise_xor_val; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + if (dpf_lookup_no[pix2]) { + val2 += dblpfofs[bpldualpf2of]; + } + val2 ^= bplcon4_denise_xor_val; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + uae_u8 val3 = dpf_lookup[pix3]; + if (dpf_lookup_no[pix3]) { + val3 += dblpfofs[bpldualpf2of]; + } + val3 ^= bplcon4_denise_xor_val; + dpix_val3 = denise_colors.acolors[val3]; + gpix3 = get_genlock_transparency(dpf_lookup[pix3]); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_ham0_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_ham1_p8_ishres_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + int cnt_next = denise_hcounter_next << 2; + if (checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites_aga(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = loaded_pixs[0]; + clxdat |= bplcoltable[pix0]; + dpix_val0 = decode_ham_pixel_aga(pix0); + gpix0 = get_genlock_transparency((pix0 >> 2) & 63); + } + last_bpl_pix = pix0; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 0) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + loaded_pixs[0] = loaded_pix; + matchsprites_aga(cnt + 1); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = loaded_pixs[1]; + clxdat |= bplcoltable[pix1]; + dpix_val1 = decode_ham_pixel_aga(pix1); + gpix1 = get_genlock_transparency((pix1 >> 2) & 63); + } + last_bpl_pix = pix1; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 1) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + loaded_pixs[1] = loaded_pix; + matchsprites_aga(cnt + 2); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = loaded_pixs[2]; + clxdat |= bplcoltable[pix2]; + dpix_val2 = decode_ham_pixel_aga(pix2); + gpix2 = get_genlock_transparency((pix2 >> 2) & 63); + } + last_bpl_pix = pix2; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 2) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv2 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv2 = svt; + } + } + loaded_pixs[2] = loaded_pix; + matchsprites_aga(cnt + 3); + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + if (!denise_blank_active) { + gpix3 = get_genlock_transparency_border(); + dpix_val3 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix3 = loaded_pixs[3]; + clxdat |= bplcoltable[pix3]; + dpix_val3 = decode_ham_pixel_aga(pix3); + gpix3 = get_genlock_transparency((pix3 >> 2) & 63); + } + last_bpl_pix = pix3; + } + shiftbpl8_64(); + if (bpldat_copy[0] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[0]) { + copybpl8e_64(); + } + if (bpldat_copy[1] && ((cnt | 3) & 63) == bplcon1_shift_full_masked[1]) { + copybpl8o_64(); + } + loaded_pix = getbpl8_64(); + uae_u32 sv3 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_aga(denise_spr_add); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv3 = svt; + } + } + loaded_pixs[3] = loaded_pix; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + if (sv1) { + uae_u32 spix1 = denise_render_sprites2(pix1, sv1); + if (spix1) { + dpix_val1 = denise_colors.acolors[spix1]; + gpix1 = get_genlock_transparency(spix1); + + } + } + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + if (sv2) { + uae_u32 spix2 = denise_render_sprites2(pix2, sv2); + if (spix2) { + dpix_val2 = denise_colors.acolors[spix2]; + gpix2 = get_genlock_transparency(spix2); + + } + } + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + if (sv3) { + uae_u32 spix3 = denise_render_sprites2(pix3, sv3); + if (spix3) { + dpix_val3 = denise_colors.acolors[spix3]; + gpix3 = get_genlock_transparency(spix3); + + } + } + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = dtbuf[h ^ lol][0]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = dtbuf[h ^ lol][1]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = dtbuf[h ^ lol][2]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = dtbuf[h ^ lol][3]; + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_aga_fm2_kehb0_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_aga_fm2_kehb1_p8_ishres_dshres_spr_genlock(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_aga_genlock_funcs[] = { + lts_aga_fm0_n0_p4_ilores_dlores_genlock, + lts_aga_fm0_n1_p4_ilores_dlores_genlock, + lts_aga_fm0_dpf0_p4_ilores_dlores_genlock, + lts_aga_fm0_dpf1_p4_ilores_dlores_genlock, + lts_aga_fm0_ehb0_p4_ilores_dlores_genlock, + lts_aga_fm0_ehb1_p4_ilores_dlores_genlock, + lts_aga_fm0_ham0_p4_ilores_dlores_genlock, + lts_aga_fm0_ham1_p4_ilores_dlores_genlock, + lts_aga_fm0_kehb0_p4_ilores_dlores_genlock, + lts_aga_fm0_kehb1_p4_ilores_dlores_genlock, + lts_aga_fm0_n0_p8_ilores_dlores_genlock, + lts_aga_fm0_n1_p8_ilores_dlores_genlock, + lts_aga_fm0_dpf0_p8_ilores_dlores_genlock, + lts_aga_fm0_dpf1_p8_ilores_dlores_genlock, + lts_aga_fm0_ehb0_p8_ilores_dlores_genlock, + lts_aga_fm0_ehb1_p8_ilores_dlores_genlock, + lts_aga_fm0_ham0_p8_ilores_dlores_genlock, + lts_aga_fm0_ham1_p8_ilores_dlores_genlock, + lts_aga_fm0_kehb0_p8_ilores_dlores_genlock, + lts_aga_fm0_kehb1_p8_ilores_dlores_genlock, + lts_aga_fm0_n0_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_n1_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_dpf0_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_dpf1_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_ehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_ehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_ham0_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_ham1_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_kehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_kehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm0_n0_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_n1_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_dpf0_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_dpf1_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_ehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_ehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_ham0_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_ham1_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_kehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_kehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm0_n0_p4_ihires_dlores_genlock, + lts_aga_fm0_n1_p4_ihires_dlores_genlock, + lts_aga_fm0_dpf0_p4_ihires_dlores_genlock, + lts_aga_fm0_dpf1_p4_ihires_dlores_genlock, + lts_aga_fm0_ehb0_p4_ihires_dlores_genlock, + lts_aga_fm0_ehb1_p4_ihires_dlores_genlock, + lts_aga_fm0_ham0_p4_ihires_dlores_genlock, + lts_aga_fm0_ham1_p4_ihires_dlores_genlock, + lts_aga_fm0_kehb0_p4_ihires_dlores_genlock, + lts_aga_fm0_kehb1_p4_ihires_dlores_genlock, + lts_aga_fm0_n0_p8_ihires_dlores_genlock, + lts_aga_fm0_n1_p8_ihires_dlores_genlock, + lts_aga_fm0_dpf0_p8_ihires_dlores_genlock, + lts_aga_fm0_dpf1_p8_ihires_dlores_genlock, + lts_aga_fm0_ehb0_p8_ihires_dlores_genlock, + lts_aga_fm0_ehb1_p8_ihires_dlores_genlock, + lts_aga_fm0_ham0_p8_ihires_dlores_genlock, + lts_aga_fm0_ham1_p8_ihires_dlores_genlock, + lts_aga_fm0_kehb0_p8_ihires_dlores_genlock, + lts_aga_fm0_kehb1_p8_ihires_dlores_genlock, + lts_aga_fm0_n0_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_n1_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_dpf0_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_dpf1_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_ehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_ehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_ham0_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_ham1_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_kehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_kehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm0_n0_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_n1_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_dpf0_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_dpf1_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_ehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_ehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_ham0_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_ham1_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_kehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_kehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm0_n0_p4_ishres_dlores_genlock, + lts_aga_fm0_n1_p4_ishres_dlores_genlock, + lts_aga_fm0_dpf0_p4_ishres_dlores_genlock, + lts_aga_fm0_dpf1_p4_ishres_dlores_genlock, + lts_aga_fm0_ehb0_p4_ishres_dlores_genlock, + lts_aga_fm0_ehb1_p4_ishres_dlores_genlock, + lts_aga_fm0_ham0_p4_ishres_dlores_genlock, + lts_aga_fm0_ham1_p4_ishres_dlores_genlock, + lts_aga_fm0_kehb0_p4_ishres_dlores_genlock, + lts_aga_fm0_kehb1_p4_ishres_dlores_genlock, + lts_aga_fm0_n0_p8_ishres_dlores_genlock, + lts_aga_fm0_n1_p8_ishres_dlores_genlock, + lts_aga_fm0_dpf0_p8_ishres_dlores_genlock, + lts_aga_fm0_dpf1_p8_ishres_dlores_genlock, + lts_aga_fm0_ehb0_p8_ishres_dlores_genlock, + lts_aga_fm0_ehb1_p8_ishres_dlores_genlock, + lts_aga_fm0_ham0_p8_ishres_dlores_genlock, + lts_aga_fm0_ham1_p8_ishres_dlores_genlock, + lts_aga_fm0_kehb0_p8_ishres_dlores_genlock, + lts_aga_fm0_kehb1_p8_ishres_dlores_genlock, + lts_aga_fm0_n0_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_n1_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_dpf0_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_dpf1_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_ehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_ehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_ham0_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_ham1_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_kehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_kehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm0_n0_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_n1_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_dpf0_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_dpf1_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_ehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_ehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_ham0_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_ham1_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_kehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_kehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm0_n0_p4_ilores_dhires_genlock, + lts_aga_fm0_n1_p4_ilores_dhires_genlock, + lts_aga_fm0_dpf0_p4_ilores_dhires_genlock, + lts_aga_fm0_dpf1_p4_ilores_dhires_genlock, + lts_aga_fm0_ehb0_p4_ilores_dhires_genlock, + lts_aga_fm0_ehb1_p4_ilores_dhires_genlock, + lts_aga_fm0_ham0_p4_ilores_dhires_genlock, + lts_aga_fm0_ham1_p4_ilores_dhires_genlock, + lts_aga_fm0_kehb0_p4_ilores_dhires_genlock, + lts_aga_fm0_kehb1_p4_ilores_dhires_genlock, + lts_aga_fm0_n0_p8_ilores_dhires_genlock, + lts_aga_fm0_n1_p8_ilores_dhires_genlock, + lts_aga_fm0_dpf0_p8_ilores_dhires_genlock, + lts_aga_fm0_dpf1_p8_ilores_dhires_genlock, + lts_aga_fm0_ehb0_p8_ilores_dhires_genlock, + lts_aga_fm0_ehb1_p8_ilores_dhires_genlock, + lts_aga_fm0_ham0_p8_ilores_dhires_genlock, + lts_aga_fm0_ham1_p8_ilores_dhires_genlock, + lts_aga_fm0_kehb0_p8_ilores_dhires_genlock, + lts_aga_fm0_kehb1_p8_ilores_dhires_genlock, + lts_aga_fm0_n0_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_n1_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_dpf0_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_dpf1_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_ehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_ehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_ham0_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_ham1_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_kehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_kehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm0_n0_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_n1_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_dpf0_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_dpf1_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_ehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_ehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_ham0_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_ham1_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_kehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_kehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm0_n0_p4_ihires_dhires_genlock, + lts_aga_fm0_n1_p4_ihires_dhires_genlock, + lts_aga_fm0_dpf0_p4_ihires_dhires_genlock, + lts_aga_fm0_dpf1_p4_ihires_dhires_genlock, + lts_aga_fm0_ehb0_p4_ihires_dhires_genlock, + lts_aga_fm0_ehb1_p4_ihires_dhires_genlock, + lts_aga_fm0_ham0_p4_ihires_dhires_genlock, + lts_aga_fm0_ham1_p4_ihires_dhires_genlock, + lts_aga_fm0_kehb0_p4_ihires_dhires_genlock, + lts_aga_fm0_kehb1_p4_ihires_dhires_genlock, + lts_aga_fm0_n0_p8_ihires_dhires_genlock, + lts_aga_fm0_n1_p8_ihires_dhires_genlock, + lts_aga_fm0_dpf0_p8_ihires_dhires_genlock, + lts_aga_fm0_dpf1_p8_ihires_dhires_genlock, + lts_aga_fm0_ehb0_p8_ihires_dhires_genlock, + lts_aga_fm0_ehb1_p8_ihires_dhires_genlock, + lts_aga_fm0_ham0_p8_ihires_dhires_genlock, + lts_aga_fm0_ham1_p8_ihires_dhires_genlock, + lts_aga_fm0_kehb0_p8_ihires_dhires_genlock, + lts_aga_fm0_kehb1_p8_ihires_dhires_genlock, + lts_aga_fm0_n0_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_n1_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_dpf0_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_dpf1_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_ehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_ehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_ham0_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_ham1_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_kehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_kehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm0_n0_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_n1_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_dpf0_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_dpf1_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_ehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_ehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_ham0_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_ham1_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_kehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_kehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm0_n0_p4_ishres_dhires_genlock, + lts_aga_fm0_n1_p4_ishres_dhires_genlock, + lts_aga_fm0_dpf0_p4_ishres_dhires_genlock, + lts_aga_fm0_dpf1_p4_ishres_dhires_genlock, + lts_aga_fm0_ehb0_p4_ishres_dhires_genlock, + lts_aga_fm0_ehb1_p4_ishres_dhires_genlock, + lts_aga_fm0_ham0_p4_ishres_dhires_genlock, + lts_aga_fm0_ham1_p4_ishres_dhires_genlock, + lts_aga_fm0_kehb0_p4_ishres_dhires_genlock, + lts_aga_fm0_kehb1_p4_ishres_dhires_genlock, + lts_aga_fm0_n0_p8_ishres_dhires_genlock, + lts_aga_fm0_n1_p8_ishres_dhires_genlock, + lts_aga_fm0_dpf0_p8_ishres_dhires_genlock, + lts_aga_fm0_dpf1_p8_ishres_dhires_genlock, + lts_aga_fm0_ehb0_p8_ishres_dhires_genlock, + lts_aga_fm0_ehb1_p8_ishres_dhires_genlock, + lts_aga_fm0_ham0_p8_ishres_dhires_genlock, + lts_aga_fm0_ham1_p8_ishres_dhires_genlock, + lts_aga_fm0_kehb0_p8_ishres_dhires_genlock, + lts_aga_fm0_kehb1_p8_ishres_dhires_genlock, + lts_aga_fm0_n0_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_n1_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_dpf0_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_dpf1_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_ehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_ehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_ham0_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_ham1_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_kehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_kehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm0_n0_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_n1_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_dpf0_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_dpf1_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_ehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_ehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_ham0_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_ham1_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_kehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_kehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm0_n0_p4_ilores_dshres_genlock, + lts_aga_fm0_n1_p4_ilores_dshres_genlock, + lts_aga_fm0_dpf0_p4_ilores_dshres_genlock, + lts_aga_fm0_dpf1_p4_ilores_dshres_genlock, + lts_aga_fm0_ehb0_p4_ilores_dshres_genlock, + lts_aga_fm0_ehb1_p4_ilores_dshres_genlock, + lts_aga_fm0_ham0_p4_ilores_dshres_genlock, + lts_aga_fm0_ham1_p4_ilores_dshres_genlock, + lts_aga_fm0_kehb0_p4_ilores_dshres_genlock, + lts_aga_fm0_kehb1_p4_ilores_dshres_genlock, + lts_aga_fm0_n0_p8_ilores_dshres_genlock, + lts_aga_fm0_n1_p8_ilores_dshres_genlock, + lts_aga_fm0_dpf0_p8_ilores_dshres_genlock, + lts_aga_fm0_dpf1_p8_ilores_dshres_genlock, + lts_aga_fm0_ehb0_p8_ilores_dshres_genlock, + lts_aga_fm0_ehb1_p8_ilores_dshres_genlock, + lts_aga_fm0_ham0_p8_ilores_dshres_genlock, + lts_aga_fm0_ham1_p8_ilores_dshres_genlock, + lts_aga_fm0_kehb0_p8_ilores_dshres_genlock, + lts_aga_fm0_kehb1_p8_ilores_dshres_genlock, + lts_aga_fm0_n0_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_n1_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_dpf0_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_dpf1_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_ehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_ehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_ham0_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_ham1_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_kehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_kehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm0_n0_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_n1_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_dpf0_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_dpf1_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_ehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_ehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_ham0_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_ham1_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_kehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_kehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm0_n0_p4_ihires_dshres_genlock, + lts_aga_fm0_n1_p4_ihires_dshres_genlock, + lts_aga_fm0_dpf0_p4_ihires_dshres_genlock, + lts_aga_fm0_dpf1_p4_ihires_dshres_genlock, + lts_aga_fm0_ehb0_p4_ihires_dshres_genlock, + lts_aga_fm0_ehb1_p4_ihires_dshres_genlock, + lts_aga_fm0_ham0_p4_ihires_dshres_genlock, + lts_aga_fm0_ham1_p4_ihires_dshres_genlock, + lts_aga_fm0_kehb0_p4_ihires_dshres_genlock, + lts_aga_fm0_kehb1_p4_ihires_dshres_genlock, + lts_aga_fm0_n0_p8_ihires_dshres_genlock, + lts_aga_fm0_n1_p8_ihires_dshres_genlock, + lts_aga_fm0_dpf0_p8_ihires_dshres_genlock, + lts_aga_fm0_dpf1_p8_ihires_dshres_genlock, + lts_aga_fm0_ehb0_p8_ihires_dshres_genlock, + lts_aga_fm0_ehb1_p8_ihires_dshres_genlock, + lts_aga_fm0_ham0_p8_ihires_dshres_genlock, + lts_aga_fm0_ham1_p8_ihires_dshres_genlock, + lts_aga_fm0_kehb0_p8_ihires_dshres_genlock, + lts_aga_fm0_kehb1_p8_ihires_dshres_genlock, + lts_aga_fm0_n0_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_n1_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_dpf0_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_dpf1_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_ehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_ehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_ham0_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_ham1_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_kehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_kehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm0_n0_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_n1_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_dpf0_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_dpf1_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_ehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_ehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_ham0_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_ham1_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_kehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_kehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm0_n0_p4_ishres_dshres_genlock, + lts_aga_fm0_n1_p4_ishres_dshres_genlock, + lts_aga_fm0_dpf0_p4_ishres_dshres_genlock, + lts_aga_fm0_dpf1_p4_ishres_dshres_genlock, + lts_aga_fm0_ehb0_p4_ishres_dshres_genlock, + lts_aga_fm0_ehb1_p4_ishres_dshres_genlock, + lts_aga_fm0_ham0_p4_ishres_dshres_genlock, + lts_aga_fm0_ham1_p4_ishres_dshres_genlock, + lts_aga_fm0_kehb0_p4_ishres_dshres_genlock, + lts_aga_fm0_kehb1_p4_ishres_dshres_genlock, + lts_aga_fm0_n0_p8_ishres_dshres_genlock, + lts_aga_fm0_n1_p8_ishres_dshres_genlock, + lts_aga_fm0_dpf0_p8_ishres_dshres_genlock, + lts_aga_fm0_dpf1_p8_ishres_dshres_genlock, + lts_aga_fm0_ehb0_p8_ishres_dshres_genlock, + lts_aga_fm0_ehb1_p8_ishres_dshres_genlock, + lts_aga_fm0_ham0_p8_ishres_dshres_genlock, + lts_aga_fm0_ham1_p8_ishres_dshres_genlock, + lts_aga_fm0_kehb0_p8_ishres_dshres_genlock, + lts_aga_fm0_kehb1_p8_ishres_dshres_genlock, + lts_aga_fm0_n0_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_n1_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_dpf0_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_dpf1_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_ehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_ehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_ham0_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_ham1_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_kehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_kehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm0_n0_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_n1_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_dpf0_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_dpf1_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_ehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_ehb1_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_ham0_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_ham1_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_kehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm0_kehb1_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_n0_p4_ilores_dlores_genlock, + lts_aga_fm1_n1_p4_ilores_dlores_genlock, + lts_aga_fm1_dpf0_p4_ilores_dlores_genlock, + lts_aga_fm1_dpf1_p4_ilores_dlores_genlock, + lts_aga_fm1_ehb0_p4_ilores_dlores_genlock, + lts_aga_fm1_ehb1_p4_ilores_dlores_genlock, + lts_aga_fm1_ham0_p4_ilores_dlores_genlock, + lts_aga_fm1_ham1_p4_ilores_dlores_genlock, + lts_aga_fm1_kehb0_p4_ilores_dlores_genlock, + lts_aga_fm1_kehb1_p4_ilores_dlores_genlock, + lts_aga_fm1_n0_p8_ilores_dlores_genlock, + lts_aga_fm1_n1_p8_ilores_dlores_genlock, + lts_aga_fm1_dpf0_p8_ilores_dlores_genlock, + lts_aga_fm1_dpf1_p8_ilores_dlores_genlock, + lts_aga_fm1_ehb0_p8_ilores_dlores_genlock, + lts_aga_fm1_ehb1_p8_ilores_dlores_genlock, + lts_aga_fm1_ham0_p8_ilores_dlores_genlock, + lts_aga_fm1_ham1_p8_ilores_dlores_genlock, + lts_aga_fm1_kehb0_p8_ilores_dlores_genlock, + lts_aga_fm1_kehb1_p8_ilores_dlores_genlock, + lts_aga_fm1_n0_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_n1_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_dpf0_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_dpf1_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_ehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_ehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_ham0_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_ham1_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_kehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_kehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm1_n0_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_n1_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_dpf0_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_dpf1_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_ehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_ehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_ham0_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_ham1_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_kehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_kehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm1_n0_p4_ihires_dlores_genlock, + lts_aga_fm1_n1_p4_ihires_dlores_genlock, + lts_aga_fm1_dpf0_p4_ihires_dlores_genlock, + lts_aga_fm1_dpf1_p4_ihires_dlores_genlock, + lts_aga_fm1_ehb0_p4_ihires_dlores_genlock, + lts_aga_fm1_ehb1_p4_ihires_dlores_genlock, + lts_aga_fm1_ham0_p4_ihires_dlores_genlock, + lts_aga_fm1_ham1_p4_ihires_dlores_genlock, + lts_aga_fm1_kehb0_p4_ihires_dlores_genlock, + lts_aga_fm1_kehb1_p4_ihires_dlores_genlock, + lts_aga_fm1_n0_p8_ihires_dlores_genlock, + lts_aga_fm1_n1_p8_ihires_dlores_genlock, + lts_aga_fm1_dpf0_p8_ihires_dlores_genlock, + lts_aga_fm1_dpf1_p8_ihires_dlores_genlock, + lts_aga_fm1_ehb0_p8_ihires_dlores_genlock, + lts_aga_fm1_ehb1_p8_ihires_dlores_genlock, + lts_aga_fm1_ham0_p8_ihires_dlores_genlock, + lts_aga_fm1_ham1_p8_ihires_dlores_genlock, + lts_aga_fm1_kehb0_p8_ihires_dlores_genlock, + lts_aga_fm1_kehb1_p8_ihires_dlores_genlock, + lts_aga_fm1_n0_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_n1_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_dpf0_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_dpf1_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_ehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_ehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_ham0_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_ham1_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_kehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_kehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm1_n0_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_n1_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_dpf0_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_dpf1_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_ehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_ehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_ham0_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_ham1_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_kehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_kehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm1_n0_p4_ishres_dlores_genlock, + lts_aga_fm1_n1_p4_ishres_dlores_genlock, + lts_aga_fm1_dpf0_p4_ishres_dlores_genlock, + lts_aga_fm1_dpf1_p4_ishres_dlores_genlock, + lts_aga_fm1_ehb0_p4_ishres_dlores_genlock, + lts_aga_fm1_ehb1_p4_ishres_dlores_genlock, + lts_aga_fm1_ham0_p4_ishres_dlores_genlock, + lts_aga_fm1_ham1_p4_ishres_dlores_genlock, + lts_aga_fm1_kehb0_p4_ishres_dlores_genlock, + lts_aga_fm1_kehb1_p4_ishres_dlores_genlock, + lts_aga_fm1_n0_p8_ishres_dlores_genlock, + lts_aga_fm1_n1_p8_ishres_dlores_genlock, + lts_aga_fm1_dpf0_p8_ishres_dlores_genlock, + lts_aga_fm1_dpf1_p8_ishres_dlores_genlock, + lts_aga_fm1_ehb0_p8_ishres_dlores_genlock, + lts_aga_fm1_ehb1_p8_ishres_dlores_genlock, + lts_aga_fm1_ham0_p8_ishres_dlores_genlock, + lts_aga_fm1_ham1_p8_ishres_dlores_genlock, + lts_aga_fm1_kehb0_p8_ishres_dlores_genlock, + lts_aga_fm1_kehb1_p8_ishres_dlores_genlock, + lts_aga_fm1_n0_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_n1_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_dpf0_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_dpf1_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_ehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_ehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_ham0_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_ham1_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_kehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_kehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm1_n0_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_n1_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_dpf0_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_dpf1_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_ehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_ehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_ham0_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_ham1_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_kehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_kehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm1_n0_p4_ilores_dhires_genlock, + lts_aga_fm1_n1_p4_ilores_dhires_genlock, + lts_aga_fm1_dpf0_p4_ilores_dhires_genlock, + lts_aga_fm1_dpf1_p4_ilores_dhires_genlock, + lts_aga_fm1_ehb0_p4_ilores_dhires_genlock, + lts_aga_fm1_ehb1_p4_ilores_dhires_genlock, + lts_aga_fm1_ham0_p4_ilores_dhires_genlock, + lts_aga_fm1_ham1_p4_ilores_dhires_genlock, + lts_aga_fm1_kehb0_p4_ilores_dhires_genlock, + lts_aga_fm1_kehb1_p4_ilores_dhires_genlock, + lts_aga_fm1_n0_p8_ilores_dhires_genlock, + lts_aga_fm1_n1_p8_ilores_dhires_genlock, + lts_aga_fm1_dpf0_p8_ilores_dhires_genlock, + lts_aga_fm1_dpf1_p8_ilores_dhires_genlock, + lts_aga_fm1_ehb0_p8_ilores_dhires_genlock, + lts_aga_fm1_ehb1_p8_ilores_dhires_genlock, + lts_aga_fm1_ham0_p8_ilores_dhires_genlock, + lts_aga_fm1_ham1_p8_ilores_dhires_genlock, + lts_aga_fm1_kehb0_p8_ilores_dhires_genlock, + lts_aga_fm1_kehb1_p8_ilores_dhires_genlock, + lts_aga_fm1_n0_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_n1_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_dpf0_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_dpf1_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_ehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_ehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_ham0_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_ham1_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_kehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_kehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm1_n0_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_n1_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_dpf0_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_dpf1_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_ehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_ehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_ham0_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_ham1_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_kehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_kehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm1_n0_p4_ihires_dhires_genlock, + lts_aga_fm1_n1_p4_ihires_dhires_genlock, + lts_aga_fm1_dpf0_p4_ihires_dhires_genlock, + lts_aga_fm1_dpf1_p4_ihires_dhires_genlock, + lts_aga_fm1_ehb0_p4_ihires_dhires_genlock, + lts_aga_fm1_ehb1_p4_ihires_dhires_genlock, + lts_aga_fm1_ham0_p4_ihires_dhires_genlock, + lts_aga_fm1_ham1_p4_ihires_dhires_genlock, + lts_aga_fm1_kehb0_p4_ihires_dhires_genlock, + lts_aga_fm1_kehb1_p4_ihires_dhires_genlock, + lts_aga_fm1_n0_p8_ihires_dhires_genlock, + lts_aga_fm1_n1_p8_ihires_dhires_genlock, + lts_aga_fm1_dpf0_p8_ihires_dhires_genlock, + lts_aga_fm1_dpf1_p8_ihires_dhires_genlock, + lts_aga_fm1_ehb0_p8_ihires_dhires_genlock, + lts_aga_fm1_ehb1_p8_ihires_dhires_genlock, + lts_aga_fm1_ham0_p8_ihires_dhires_genlock, + lts_aga_fm1_ham1_p8_ihires_dhires_genlock, + lts_aga_fm1_kehb0_p8_ihires_dhires_genlock, + lts_aga_fm1_kehb1_p8_ihires_dhires_genlock, + lts_aga_fm1_n0_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_n1_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_dpf0_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_dpf1_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_ehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_ehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_ham0_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_ham1_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_kehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_kehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm1_n0_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_n1_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_dpf0_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_dpf1_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_ehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_ehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_ham0_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_ham1_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_kehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_kehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm1_n0_p4_ishres_dhires_genlock, + lts_aga_fm1_n1_p4_ishres_dhires_genlock, + lts_aga_fm1_dpf0_p4_ishres_dhires_genlock, + lts_aga_fm1_dpf1_p4_ishres_dhires_genlock, + lts_aga_fm1_ehb0_p4_ishres_dhires_genlock, + lts_aga_fm1_ehb1_p4_ishres_dhires_genlock, + lts_aga_fm1_ham0_p4_ishres_dhires_genlock, + lts_aga_fm1_ham1_p4_ishres_dhires_genlock, + lts_aga_fm1_kehb0_p4_ishres_dhires_genlock, + lts_aga_fm1_kehb1_p4_ishres_dhires_genlock, + lts_aga_fm1_n0_p8_ishres_dhires_genlock, + lts_aga_fm1_n1_p8_ishres_dhires_genlock, + lts_aga_fm1_dpf0_p8_ishres_dhires_genlock, + lts_aga_fm1_dpf1_p8_ishres_dhires_genlock, + lts_aga_fm1_ehb0_p8_ishres_dhires_genlock, + lts_aga_fm1_ehb1_p8_ishres_dhires_genlock, + lts_aga_fm1_ham0_p8_ishres_dhires_genlock, + lts_aga_fm1_ham1_p8_ishres_dhires_genlock, + lts_aga_fm1_kehb0_p8_ishres_dhires_genlock, + lts_aga_fm1_kehb1_p8_ishres_dhires_genlock, + lts_aga_fm1_n0_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_n1_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_dpf0_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_dpf1_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_ehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_ehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_ham0_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_ham1_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_kehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_kehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm1_n0_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_n1_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_dpf0_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_dpf1_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_ehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_ehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_ham0_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_ham1_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_kehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_kehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm1_n0_p4_ilores_dshres_genlock, + lts_aga_fm1_n1_p4_ilores_dshres_genlock, + lts_aga_fm1_dpf0_p4_ilores_dshres_genlock, + lts_aga_fm1_dpf1_p4_ilores_dshres_genlock, + lts_aga_fm1_ehb0_p4_ilores_dshres_genlock, + lts_aga_fm1_ehb1_p4_ilores_dshres_genlock, + lts_aga_fm1_ham0_p4_ilores_dshres_genlock, + lts_aga_fm1_ham1_p4_ilores_dshres_genlock, + lts_aga_fm1_kehb0_p4_ilores_dshres_genlock, + lts_aga_fm1_kehb1_p4_ilores_dshres_genlock, + lts_aga_fm1_n0_p8_ilores_dshres_genlock, + lts_aga_fm1_n1_p8_ilores_dshres_genlock, + lts_aga_fm1_dpf0_p8_ilores_dshres_genlock, + lts_aga_fm1_dpf1_p8_ilores_dshres_genlock, + lts_aga_fm1_ehb0_p8_ilores_dshres_genlock, + lts_aga_fm1_ehb1_p8_ilores_dshres_genlock, + lts_aga_fm1_ham0_p8_ilores_dshres_genlock, + lts_aga_fm1_ham1_p8_ilores_dshres_genlock, + lts_aga_fm1_kehb0_p8_ilores_dshres_genlock, + lts_aga_fm1_kehb1_p8_ilores_dshres_genlock, + lts_aga_fm1_n0_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_n1_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_dpf0_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_dpf1_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_ehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_ehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_ham0_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_ham1_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_kehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_kehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm1_n0_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_n1_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_dpf0_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_dpf1_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_ehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_ehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_ham0_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_ham1_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_kehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_kehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm1_n0_p4_ihires_dshres_genlock, + lts_aga_fm1_n1_p4_ihires_dshres_genlock, + lts_aga_fm1_dpf0_p4_ihires_dshres_genlock, + lts_aga_fm1_dpf1_p4_ihires_dshres_genlock, + lts_aga_fm1_ehb0_p4_ihires_dshres_genlock, + lts_aga_fm1_ehb1_p4_ihires_dshres_genlock, + lts_aga_fm1_ham0_p4_ihires_dshres_genlock, + lts_aga_fm1_ham1_p4_ihires_dshres_genlock, + lts_aga_fm1_kehb0_p4_ihires_dshres_genlock, + lts_aga_fm1_kehb1_p4_ihires_dshres_genlock, + lts_aga_fm1_n0_p8_ihires_dshres_genlock, + lts_aga_fm1_n1_p8_ihires_dshres_genlock, + lts_aga_fm1_dpf0_p8_ihires_dshres_genlock, + lts_aga_fm1_dpf1_p8_ihires_dshres_genlock, + lts_aga_fm1_ehb0_p8_ihires_dshres_genlock, + lts_aga_fm1_ehb1_p8_ihires_dshres_genlock, + lts_aga_fm1_ham0_p8_ihires_dshres_genlock, + lts_aga_fm1_ham1_p8_ihires_dshres_genlock, + lts_aga_fm1_kehb0_p8_ihires_dshres_genlock, + lts_aga_fm1_kehb1_p8_ihires_dshres_genlock, + lts_aga_fm1_n0_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_n1_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_dpf0_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_dpf1_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_ehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_ehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_ham0_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_ham1_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_kehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_kehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm1_n0_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_n1_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_dpf0_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_dpf1_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_ehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_ehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_ham0_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_ham1_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_kehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_kehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm1_n0_p4_ishres_dshres_genlock, + lts_aga_fm1_n1_p4_ishres_dshres_genlock, + lts_aga_fm1_dpf0_p4_ishres_dshres_genlock, + lts_aga_fm1_dpf1_p4_ishres_dshres_genlock, + lts_aga_fm1_ehb0_p4_ishres_dshres_genlock, + lts_aga_fm1_ehb1_p4_ishres_dshres_genlock, + lts_aga_fm1_ham0_p4_ishres_dshres_genlock, + lts_aga_fm1_ham1_p4_ishres_dshres_genlock, + lts_aga_fm1_kehb0_p4_ishres_dshres_genlock, + lts_aga_fm1_kehb1_p4_ishres_dshres_genlock, + lts_aga_fm1_n0_p8_ishres_dshres_genlock, + lts_aga_fm1_n1_p8_ishres_dshres_genlock, + lts_aga_fm1_dpf0_p8_ishres_dshres_genlock, + lts_aga_fm1_dpf1_p8_ishres_dshres_genlock, + lts_aga_fm1_ehb0_p8_ishres_dshres_genlock, + lts_aga_fm1_ehb1_p8_ishres_dshres_genlock, + lts_aga_fm1_ham0_p8_ishres_dshres_genlock, + lts_aga_fm1_ham1_p8_ishres_dshres_genlock, + lts_aga_fm1_kehb0_p8_ishres_dshres_genlock, + lts_aga_fm1_kehb1_p8_ishres_dshres_genlock, + lts_aga_fm1_n0_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_n1_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_dpf0_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_dpf1_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_ehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_ehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_ham0_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_ham1_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_kehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_kehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm1_n0_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_n1_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_dpf0_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_dpf1_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_ehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_ehb1_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_ham0_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_ham1_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_kehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm1_kehb1_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_n0_p4_ilores_dlores_genlock, + lts_aga_fm2_n1_p4_ilores_dlores_genlock, + lts_aga_fm2_dpf0_p4_ilores_dlores_genlock, + lts_aga_fm2_dpf1_p4_ilores_dlores_genlock, + lts_aga_fm2_ehb0_p4_ilores_dlores_genlock, + lts_aga_fm2_ehb1_p4_ilores_dlores_genlock, + lts_aga_fm2_ham0_p4_ilores_dlores_genlock, + lts_aga_fm2_ham1_p4_ilores_dlores_genlock, + lts_aga_fm2_kehb0_p4_ilores_dlores_genlock, + lts_aga_fm2_kehb1_p4_ilores_dlores_genlock, + lts_aga_fm2_n0_p8_ilores_dlores_genlock, + lts_aga_fm2_n1_p8_ilores_dlores_genlock, + lts_aga_fm2_dpf0_p8_ilores_dlores_genlock, + lts_aga_fm2_dpf1_p8_ilores_dlores_genlock, + lts_aga_fm2_ehb0_p8_ilores_dlores_genlock, + lts_aga_fm2_ehb1_p8_ilores_dlores_genlock, + lts_aga_fm2_ham0_p8_ilores_dlores_genlock, + lts_aga_fm2_ham1_p8_ilores_dlores_genlock, + lts_aga_fm2_kehb0_p8_ilores_dlores_genlock, + lts_aga_fm2_kehb1_p8_ilores_dlores_genlock, + lts_aga_fm2_n0_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_n1_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_dpf0_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_dpf1_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_ehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_ehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_ham0_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_ham1_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_kehb0_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_kehb1_p4_ilores_dlores_spr_genlock, + lts_aga_fm2_n0_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_n1_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_dpf0_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_dpf1_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_ehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_ehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_ham0_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_ham1_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_kehb0_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_kehb1_p8_ilores_dlores_spr_genlock, + lts_aga_fm2_n0_p4_ihires_dlores_genlock, + lts_aga_fm2_n1_p4_ihires_dlores_genlock, + lts_aga_fm2_dpf0_p4_ihires_dlores_genlock, + lts_aga_fm2_dpf1_p4_ihires_dlores_genlock, + lts_aga_fm2_ehb0_p4_ihires_dlores_genlock, + lts_aga_fm2_ehb1_p4_ihires_dlores_genlock, + lts_aga_fm2_ham0_p4_ihires_dlores_genlock, + lts_aga_fm2_ham1_p4_ihires_dlores_genlock, + lts_aga_fm2_kehb0_p4_ihires_dlores_genlock, + lts_aga_fm2_kehb1_p4_ihires_dlores_genlock, + lts_aga_fm2_n0_p8_ihires_dlores_genlock, + lts_aga_fm2_n1_p8_ihires_dlores_genlock, + lts_aga_fm2_dpf0_p8_ihires_dlores_genlock, + lts_aga_fm2_dpf1_p8_ihires_dlores_genlock, + lts_aga_fm2_ehb0_p8_ihires_dlores_genlock, + lts_aga_fm2_ehb1_p8_ihires_dlores_genlock, + lts_aga_fm2_ham0_p8_ihires_dlores_genlock, + lts_aga_fm2_ham1_p8_ihires_dlores_genlock, + lts_aga_fm2_kehb0_p8_ihires_dlores_genlock, + lts_aga_fm2_kehb1_p8_ihires_dlores_genlock, + lts_aga_fm2_n0_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_n1_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_dpf0_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_dpf1_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_ehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_ehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_ham0_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_ham1_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_kehb0_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_kehb1_p4_ihires_dlores_spr_genlock, + lts_aga_fm2_n0_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_n1_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_dpf0_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_dpf1_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_ehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_ehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_ham0_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_ham1_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_kehb0_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_kehb1_p8_ihires_dlores_spr_genlock, + lts_aga_fm2_n0_p4_ishres_dlores_genlock, + lts_aga_fm2_n1_p4_ishres_dlores_genlock, + lts_aga_fm2_dpf0_p4_ishres_dlores_genlock, + lts_aga_fm2_dpf1_p4_ishres_dlores_genlock, + lts_aga_fm2_ehb0_p4_ishres_dlores_genlock, + lts_aga_fm2_ehb1_p4_ishres_dlores_genlock, + lts_aga_fm2_ham0_p4_ishres_dlores_genlock, + lts_aga_fm2_ham1_p4_ishres_dlores_genlock, + lts_aga_fm2_kehb0_p4_ishres_dlores_genlock, + lts_aga_fm2_kehb1_p4_ishres_dlores_genlock, + lts_aga_fm2_n0_p8_ishres_dlores_genlock, + lts_aga_fm2_n1_p8_ishres_dlores_genlock, + lts_aga_fm2_dpf0_p8_ishres_dlores_genlock, + lts_aga_fm2_dpf1_p8_ishres_dlores_genlock, + lts_aga_fm2_ehb0_p8_ishres_dlores_genlock, + lts_aga_fm2_ehb1_p8_ishres_dlores_genlock, + lts_aga_fm2_ham0_p8_ishres_dlores_genlock, + lts_aga_fm2_ham1_p8_ishres_dlores_genlock, + lts_aga_fm2_kehb0_p8_ishres_dlores_genlock, + lts_aga_fm2_kehb1_p8_ishres_dlores_genlock, + lts_aga_fm2_n0_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_n1_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_dpf0_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_dpf1_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_ehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_ehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_ham0_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_ham1_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_kehb0_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_kehb1_p4_ishres_dlores_spr_genlock, + lts_aga_fm2_n0_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_n1_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_dpf0_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_dpf1_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_ehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_ehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_ham0_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_ham1_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_kehb0_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_kehb1_p8_ishres_dlores_spr_genlock, + lts_aga_fm2_n0_p4_ilores_dhires_genlock, + lts_aga_fm2_n1_p4_ilores_dhires_genlock, + lts_aga_fm2_dpf0_p4_ilores_dhires_genlock, + lts_aga_fm2_dpf1_p4_ilores_dhires_genlock, + lts_aga_fm2_ehb0_p4_ilores_dhires_genlock, + lts_aga_fm2_ehb1_p4_ilores_dhires_genlock, + lts_aga_fm2_ham0_p4_ilores_dhires_genlock, + lts_aga_fm2_ham1_p4_ilores_dhires_genlock, + lts_aga_fm2_kehb0_p4_ilores_dhires_genlock, + lts_aga_fm2_kehb1_p4_ilores_dhires_genlock, + lts_aga_fm2_n0_p8_ilores_dhires_genlock, + lts_aga_fm2_n1_p8_ilores_dhires_genlock, + lts_aga_fm2_dpf0_p8_ilores_dhires_genlock, + lts_aga_fm2_dpf1_p8_ilores_dhires_genlock, + lts_aga_fm2_ehb0_p8_ilores_dhires_genlock, + lts_aga_fm2_ehb1_p8_ilores_dhires_genlock, + lts_aga_fm2_ham0_p8_ilores_dhires_genlock, + lts_aga_fm2_ham1_p8_ilores_dhires_genlock, + lts_aga_fm2_kehb0_p8_ilores_dhires_genlock, + lts_aga_fm2_kehb1_p8_ilores_dhires_genlock, + lts_aga_fm2_n0_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_n1_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_dpf0_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_dpf1_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_ehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_ehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_ham0_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_ham1_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_kehb0_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_kehb1_p4_ilores_dhires_spr_genlock, + lts_aga_fm2_n0_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_n1_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_dpf0_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_dpf1_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_ehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_ehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_ham0_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_ham1_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_kehb0_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_kehb1_p8_ilores_dhires_spr_genlock, + lts_aga_fm2_n0_p4_ihires_dhires_genlock, + lts_aga_fm2_n1_p4_ihires_dhires_genlock, + lts_aga_fm2_dpf0_p4_ihires_dhires_genlock, + lts_aga_fm2_dpf1_p4_ihires_dhires_genlock, + lts_aga_fm2_ehb0_p4_ihires_dhires_genlock, + lts_aga_fm2_ehb1_p4_ihires_dhires_genlock, + lts_aga_fm2_ham0_p4_ihires_dhires_genlock, + lts_aga_fm2_ham1_p4_ihires_dhires_genlock, + lts_aga_fm2_kehb0_p4_ihires_dhires_genlock, + lts_aga_fm2_kehb1_p4_ihires_dhires_genlock, + lts_aga_fm2_n0_p8_ihires_dhires_genlock, + lts_aga_fm2_n1_p8_ihires_dhires_genlock, + lts_aga_fm2_dpf0_p8_ihires_dhires_genlock, + lts_aga_fm2_dpf1_p8_ihires_dhires_genlock, + lts_aga_fm2_ehb0_p8_ihires_dhires_genlock, + lts_aga_fm2_ehb1_p8_ihires_dhires_genlock, + lts_aga_fm2_ham0_p8_ihires_dhires_genlock, + lts_aga_fm2_ham1_p8_ihires_dhires_genlock, + lts_aga_fm2_kehb0_p8_ihires_dhires_genlock, + lts_aga_fm2_kehb1_p8_ihires_dhires_genlock, + lts_aga_fm2_n0_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_n1_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_dpf0_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_dpf1_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_ehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_ehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_ham0_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_ham1_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_kehb0_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_kehb1_p4_ihires_dhires_spr_genlock, + lts_aga_fm2_n0_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_n1_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_dpf0_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_dpf1_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_ehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_ehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_ham0_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_ham1_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_kehb0_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_kehb1_p8_ihires_dhires_spr_genlock, + lts_aga_fm2_n0_p4_ishres_dhires_genlock, + lts_aga_fm2_n1_p4_ishres_dhires_genlock, + lts_aga_fm2_dpf0_p4_ishres_dhires_genlock, + lts_aga_fm2_dpf1_p4_ishres_dhires_genlock, + lts_aga_fm2_ehb0_p4_ishres_dhires_genlock, + lts_aga_fm2_ehb1_p4_ishres_dhires_genlock, + lts_aga_fm2_ham0_p4_ishres_dhires_genlock, + lts_aga_fm2_ham1_p4_ishres_dhires_genlock, + lts_aga_fm2_kehb0_p4_ishres_dhires_genlock, + lts_aga_fm2_kehb1_p4_ishres_dhires_genlock, + lts_aga_fm2_n0_p8_ishres_dhires_genlock, + lts_aga_fm2_n1_p8_ishres_dhires_genlock, + lts_aga_fm2_dpf0_p8_ishres_dhires_genlock, + lts_aga_fm2_dpf1_p8_ishres_dhires_genlock, + lts_aga_fm2_ehb0_p8_ishres_dhires_genlock, + lts_aga_fm2_ehb1_p8_ishres_dhires_genlock, + lts_aga_fm2_ham0_p8_ishres_dhires_genlock, + lts_aga_fm2_ham1_p8_ishres_dhires_genlock, + lts_aga_fm2_kehb0_p8_ishres_dhires_genlock, + lts_aga_fm2_kehb1_p8_ishres_dhires_genlock, + lts_aga_fm2_n0_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_n1_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_dpf0_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_dpf1_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_ehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_ehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_ham0_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_ham1_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_kehb0_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_kehb1_p4_ishres_dhires_spr_genlock, + lts_aga_fm2_n0_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_n1_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_dpf0_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_dpf1_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_ehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_ehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_ham0_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_ham1_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_kehb0_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_kehb1_p8_ishres_dhires_spr_genlock, + lts_aga_fm2_n0_p4_ilores_dshres_genlock, + lts_aga_fm2_n1_p4_ilores_dshres_genlock, + lts_aga_fm2_dpf0_p4_ilores_dshres_genlock, + lts_aga_fm2_dpf1_p4_ilores_dshres_genlock, + lts_aga_fm2_ehb0_p4_ilores_dshres_genlock, + lts_aga_fm2_ehb1_p4_ilores_dshres_genlock, + lts_aga_fm2_ham0_p4_ilores_dshres_genlock, + lts_aga_fm2_ham1_p4_ilores_dshres_genlock, + lts_aga_fm2_kehb0_p4_ilores_dshres_genlock, + lts_aga_fm2_kehb1_p4_ilores_dshres_genlock, + lts_aga_fm2_n0_p8_ilores_dshres_genlock, + lts_aga_fm2_n1_p8_ilores_dshres_genlock, + lts_aga_fm2_dpf0_p8_ilores_dshres_genlock, + lts_aga_fm2_dpf1_p8_ilores_dshres_genlock, + lts_aga_fm2_ehb0_p8_ilores_dshres_genlock, + lts_aga_fm2_ehb1_p8_ilores_dshres_genlock, + lts_aga_fm2_ham0_p8_ilores_dshres_genlock, + lts_aga_fm2_ham1_p8_ilores_dshres_genlock, + lts_aga_fm2_kehb0_p8_ilores_dshres_genlock, + lts_aga_fm2_kehb1_p8_ilores_dshres_genlock, + lts_aga_fm2_n0_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_n1_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_dpf0_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_dpf1_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_ehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_ehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_ham0_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_ham1_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_kehb0_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_kehb1_p4_ilores_dshres_spr_genlock, + lts_aga_fm2_n0_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_n1_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_dpf0_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_dpf1_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_ehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_ehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_ham0_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_ham1_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_kehb0_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_kehb1_p8_ilores_dshres_spr_genlock, + lts_aga_fm2_n0_p4_ihires_dshres_genlock, + lts_aga_fm2_n1_p4_ihires_dshres_genlock, + lts_aga_fm2_dpf0_p4_ihires_dshres_genlock, + lts_aga_fm2_dpf1_p4_ihires_dshres_genlock, + lts_aga_fm2_ehb0_p4_ihires_dshres_genlock, + lts_aga_fm2_ehb1_p4_ihires_dshres_genlock, + lts_aga_fm2_ham0_p4_ihires_dshres_genlock, + lts_aga_fm2_ham1_p4_ihires_dshres_genlock, + lts_aga_fm2_kehb0_p4_ihires_dshres_genlock, + lts_aga_fm2_kehb1_p4_ihires_dshres_genlock, + lts_aga_fm2_n0_p8_ihires_dshres_genlock, + lts_aga_fm2_n1_p8_ihires_dshres_genlock, + lts_aga_fm2_dpf0_p8_ihires_dshres_genlock, + lts_aga_fm2_dpf1_p8_ihires_dshres_genlock, + lts_aga_fm2_ehb0_p8_ihires_dshres_genlock, + lts_aga_fm2_ehb1_p8_ihires_dshres_genlock, + lts_aga_fm2_ham0_p8_ihires_dshres_genlock, + lts_aga_fm2_ham1_p8_ihires_dshres_genlock, + lts_aga_fm2_kehb0_p8_ihires_dshres_genlock, + lts_aga_fm2_kehb1_p8_ihires_dshres_genlock, + lts_aga_fm2_n0_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_n1_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_dpf0_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_dpf1_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_ehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_ehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_ham0_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_ham1_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_kehb0_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_kehb1_p4_ihires_dshres_spr_genlock, + lts_aga_fm2_n0_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_n1_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_dpf0_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_dpf1_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_ehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_ehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_ham0_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_ham1_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_kehb0_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_kehb1_p8_ihires_dshres_spr_genlock, + lts_aga_fm2_n0_p4_ishres_dshres_genlock, + lts_aga_fm2_n1_p4_ishres_dshres_genlock, + lts_aga_fm2_dpf0_p4_ishres_dshres_genlock, + lts_aga_fm2_dpf1_p4_ishres_dshres_genlock, + lts_aga_fm2_ehb0_p4_ishres_dshres_genlock, + lts_aga_fm2_ehb1_p4_ishres_dshres_genlock, + lts_aga_fm2_ham0_p4_ishres_dshres_genlock, + lts_aga_fm2_ham1_p4_ishres_dshres_genlock, + lts_aga_fm2_kehb0_p4_ishres_dshres_genlock, + lts_aga_fm2_kehb1_p4_ishres_dshres_genlock, + lts_aga_fm2_n0_p8_ishres_dshres_genlock, + lts_aga_fm2_n1_p8_ishres_dshres_genlock, + lts_aga_fm2_dpf0_p8_ishres_dshres_genlock, + lts_aga_fm2_dpf1_p8_ishres_dshres_genlock, + lts_aga_fm2_ehb0_p8_ishres_dshres_genlock, + lts_aga_fm2_ehb1_p8_ishres_dshres_genlock, + lts_aga_fm2_ham0_p8_ishres_dshres_genlock, + lts_aga_fm2_ham1_p8_ishres_dshres_genlock, + lts_aga_fm2_kehb0_p8_ishres_dshres_genlock, + lts_aga_fm2_kehb1_p8_ishres_dshres_genlock, + lts_aga_fm2_n0_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_n1_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_dpf0_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_dpf1_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_ehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_ehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_ham0_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_ham1_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_kehb0_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_kehb1_p4_ishres_dshres_spr_genlock, + lts_aga_fm2_n0_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_n1_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_dpf0_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_dpf1_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_ehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_ehb1_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_ham0_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_ham1_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_kehb0_p8_ishres_dshres_spr_genlock, + lts_aga_fm2_kehb1_p8_ishres_dshres_spr_genlock, +}; diff --git a/linetoscr_common.cpp b/linetoscr_common.cpp new file mode 100644 index 00000000..2131fb34 --- /dev/null +++ b/linetoscr_common.cpp @@ -0,0 +1,1162 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +STATIC_INLINE void shiftbpl1(void) +{ + bplxdat3[0] <<= 1; +} +STATIC_INLINE void shiftbpl1e(void) +{ + bplxdat3[0] <<= 1; +} +STATIC_INLINE void shiftbpl1o(void) +{ +} +STATIC_INLINE void shiftbpl2(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; +} +STATIC_INLINE void shiftbpl2e(void) +{ + bplxdat3[0] <<= 1; +} +STATIC_INLINE void shiftbpl2o(void) +{ + bplxdat3[1] <<= 1; +} +STATIC_INLINE void shiftbpl3(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; +} +STATIC_INLINE void shiftbpl3e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; +} +STATIC_INLINE void shiftbpl3o(void) +{ + bplxdat3[1] <<= 1; +} +STATIC_INLINE void shiftbpl4(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[3] <<= 1; +} +STATIC_INLINE void shiftbpl4e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; +} +STATIC_INLINE void shiftbpl4o(void) +{ + bplxdat3[1] <<= 1; + bplxdat3[3] <<= 1; +} +STATIC_INLINE void shiftbpl5(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[4] <<= 1; +} +STATIC_INLINE void shiftbpl5e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[4] <<= 1; +} +STATIC_INLINE void shiftbpl5o(void) +{ + bplxdat3[1] <<= 1; + bplxdat3[3] <<= 1; +} +STATIC_INLINE void shiftbpl6(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[4] <<= 1; + bplxdat3[5] <<= 1; +} +STATIC_INLINE void shiftbpl6e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[4] <<= 1; +} +STATIC_INLINE void shiftbpl6o(void) +{ + bplxdat3[1] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[5] <<= 1; +} +STATIC_INLINE void shiftbpl7(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[4] <<= 1; + bplxdat3[5] <<= 1; + bplxdat3[6] <<= 1; +} +STATIC_INLINE void shiftbpl7e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[4] <<= 1; + bplxdat3[6] <<= 1; +} +STATIC_INLINE void shiftbpl7o(void) +{ + bplxdat3[1] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[5] <<= 1; +} +STATIC_INLINE void shiftbpl8(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[1] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[4] <<= 1; + bplxdat3[5] <<= 1; + bplxdat3[6] <<= 1; + bplxdat3[7] <<= 1; +} +STATIC_INLINE void shiftbpl8e(void) +{ + bplxdat3[0] <<= 1; + bplxdat3[2] <<= 1; + bplxdat3[4] <<= 1; + bplxdat3[6] <<= 1; +} +STATIC_INLINE void shiftbpl8o(void) +{ + bplxdat3[1] <<= 1; + bplxdat3[3] <<= 1; + bplxdat3[5] <<= 1; + bplxdat3[7] <<= 1; +} +STATIC_INLINE void shiftbpl1_64(void) +{ + bplxdat3_64[0] <<= 1; +} +STATIC_INLINE void shiftbpl1e_64(void) +{ + bplxdat3_64[0] <<= 1; +} +STATIC_INLINE void shiftbpl1o_64(void) +{ +} +STATIC_INLINE void shiftbpl2_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; +} +STATIC_INLINE void shiftbpl2e_64(void) +{ + bplxdat3_64[0] <<= 1; +} +STATIC_INLINE void shiftbpl2o_64(void) +{ + bplxdat3_64[1] <<= 1; +} +STATIC_INLINE void shiftbpl3_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; +} +STATIC_INLINE void shiftbpl3e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; +} +STATIC_INLINE void shiftbpl3o_64(void) +{ + bplxdat3_64[1] <<= 1; +} +STATIC_INLINE void shiftbpl4_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[3] <<= 1; +} +STATIC_INLINE void shiftbpl4e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; +} +STATIC_INLINE void shiftbpl4o_64(void) +{ + bplxdat3_64[1] <<= 1; + bplxdat3_64[3] <<= 1; +} +STATIC_INLINE void shiftbpl5_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[4] <<= 1; +} +STATIC_INLINE void shiftbpl5e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[4] <<= 1; +} +STATIC_INLINE void shiftbpl5o_64(void) +{ + bplxdat3_64[1] <<= 1; + bplxdat3_64[3] <<= 1; +} +STATIC_INLINE void shiftbpl6_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[4] <<= 1; + bplxdat3_64[5] <<= 1; +} +STATIC_INLINE void shiftbpl6e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[4] <<= 1; +} +STATIC_INLINE void shiftbpl6o_64(void) +{ + bplxdat3_64[1] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[5] <<= 1; +} +STATIC_INLINE void shiftbpl7_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[4] <<= 1; + bplxdat3_64[5] <<= 1; + bplxdat3_64[6] <<= 1; +} +STATIC_INLINE void shiftbpl7e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[4] <<= 1; + bplxdat3_64[6] <<= 1; +} +STATIC_INLINE void shiftbpl7o_64(void) +{ + bplxdat3_64[1] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[5] <<= 1; +} +STATIC_INLINE void shiftbpl8_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[1] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[4] <<= 1; + bplxdat3_64[5] <<= 1; + bplxdat3_64[6] <<= 1; + bplxdat3_64[7] <<= 1; +} +STATIC_INLINE void shiftbpl8e_64(void) +{ + bplxdat3_64[0] <<= 1; + bplxdat3_64[2] <<= 1; + bplxdat3_64[4] <<= 1; + bplxdat3_64[6] <<= 1; +} +STATIC_INLINE void shiftbpl8o_64(void) +{ + bplxdat3_64[1] <<= 1; + bplxdat3_64[3] <<= 1; + bplxdat3_64[5] <<= 1; + bplxdat3_64[7] <<= 1; +} +STATIC_INLINE uae_u8 getbpl1(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + return v; +} +STATIC_INLINE uae_u8 getbpl2(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + return v; +} +STATIC_INLINE uae_u8 getbpl3(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + return v; +} +STATIC_INLINE uae_u8 getbpl4(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + v |= ((bplxdat3[3] >> 15) & 1) << 3; + return v; +} +STATIC_INLINE uae_u8 getbpl5(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + v |= ((bplxdat3[3] >> 15) & 1) << 3; + v |= ((bplxdat3[4] >> 15) & 1) << 4; + return v; +} +STATIC_INLINE uae_u8 getbpl6(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + v |= ((bplxdat3[3] >> 15) & 1) << 3; + v |= ((bplxdat3[4] >> 15) & 1) << 4; + v |= ((bplxdat3[5] >> 15) & 1) << 5; + return v; +} +STATIC_INLINE uae_u8 getbpl7(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + v |= ((bplxdat3[3] >> 15) & 1) << 3; + v |= ((bplxdat3[4] >> 15) & 1) << 4; + v |= ((bplxdat3[5] >> 15) & 1) << 5; + v |= ((bplxdat3[6] >> 15) & 1) << 6; + return v; +} +STATIC_INLINE uae_u8 getbpl8(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 15) & 1) << 0; + v |= ((bplxdat3[1] >> 15) & 1) << 1; + v |= ((bplxdat3[2] >> 15) & 1) << 2; + v |= ((bplxdat3[3] >> 15) & 1) << 3; + v |= ((bplxdat3[4] >> 15) & 1) << 4; + v |= ((bplxdat3[5] >> 15) & 1) << 5; + v |= ((bplxdat3[6] >> 15) & 1) << 6; + v |= ((bplxdat3[7] >> 15) & 1) << 7; + return v; +} +STATIC_INLINE uae_u8 getbpl1_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + return v; +} +STATIC_INLINE uae_u8 getbpl2_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + return v; +} +STATIC_INLINE uae_u8 getbpl3_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + return v; +} +STATIC_INLINE uae_u8 getbpl4_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + v |= ((bplxdat3[3] >> 31) & 1) << 3; + return v; +} +STATIC_INLINE uae_u8 getbpl5_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + v |= ((bplxdat3[3] >> 31) & 1) << 3; + v |= ((bplxdat3[4] >> 31) & 1) << 4; + return v; +} +STATIC_INLINE uae_u8 getbpl6_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + v |= ((bplxdat3[3] >> 31) & 1) << 3; + v |= ((bplxdat3[4] >> 31) & 1) << 4; + v |= ((bplxdat3[5] >> 31) & 1) << 5; + return v; +} +STATIC_INLINE uae_u8 getbpl7_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + v |= ((bplxdat3[3] >> 31) & 1) << 3; + v |= ((bplxdat3[4] >> 31) & 1) << 4; + v |= ((bplxdat3[5] >> 31) & 1) << 5; + v |= ((bplxdat3[6] >> 31) & 1) << 6; + return v; +} +STATIC_INLINE uae_u8 getbpl8_32(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3[0] >> 31) & 1) << 0; + v |= ((bplxdat3[1] >> 31) & 1) << 1; + v |= ((bplxdat3[2] >> 31) & 1) << 2; + v |= ((bplxdat3[3] >> 31) & 1) << 3; + v |= ((bplxdat3[4] >> 31) & 1) << 4; + v |= ((bplxdat3[5] >> 31) & 1) << 5; + v |= ((bplxdat3[6] >> 31) & 1) << 6; + v |= ((bplxdat3[7] >> 31) & 1) << 7; + return v; +} +STATIC_INLINE uae_u8 getbpl1_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + return v; +} +STATIC_INLINE uae_u8 getbpl2_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + return v; +} +STATIC_INLINE uae_u8 getbpl3_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + return v; +} +STATIC_INLINE uae_u8 getbpl4_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + v |= ((bplxdat3_64[3] >> 63) & 1) << 3; + return v; +} +STATIC_INLINE uae_u8 getbpl5_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + v |= ((bplxdat3_64[3] >> 63) & 1) << 3; + v |= ((bplxdat3_64[4] >> 63) & 1) << 4; + return v; +} +STATIC_INLINE uae_u8 getbpl6_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + v |= ((bplxdat3_64[3] >> 63) & 1) << 3; + v |= ((bplxdat3_64[4] >> 63) & 1) << 4; + v |= ((bplxdat3_64[5] >> 63) & 1) << 5; + return v; +} +STATIC_INLINE uae_u8 getbpl7_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + v |= ((bplxdat3_64[3] >> 63) & 1) << 3; + v |= ((bplxdat3_64[4] >> 63) & 1) << 4; + v |= ((bplxdat3_64[5] >> 63) & 1) << 5; + v |= ((bplxdat3_64[6] >> 63) & 1) << 6; + return v; +} +STATIC_INLINE uae_u8 getbpl8_64(void) +{ + uae_u8 v = 0; + v |= ((bplxdat3_64[0] >> 63) & 1) << 0; + v |= ((bplxdat3_64[1] >> 63) & 1) << 1; + v |= ((bplxdat3_64[2] >> 63) & 1) << 2; + v |= ((bplxdat3_64[3] >> 63) & 1) << 3; + v |= ((bplxdat3_64[4] >> 63) & 1) << 4; + v |= ((bplxdat3_64[5] >> 63) & 1) << 5; + v |= ((bplxdat3_64[6] >> 63) & 1) << 6; + v |= ((bplxdat3_64[7] >> 63) & 1) << 7; + return v; +} +STATIC_INLINE void copybpl1(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl2(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl3(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl4(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl5(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl6(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl7(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + if (denise_planes >= 7) { + bplxdat3[6] = bplxdat2[6]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl8(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + if (denise_planes >= 7) { + bplxdat3[6] = bplxdat2[6]; + } + if (denise_planes >= 8) { + bplxdat3[7] = bplxdat2[7]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl1e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl2e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl3e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl4e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl5e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl6e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl7e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + if (denise_planes >= 7) { + bplxdat3[6] = bplxdat2[6]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl8e(void) +{ + if (denise_planes >= 1) { + bplxdat3[0] = bplxdat2[0]; + } + if (denise_planes >= 3) { + bplxdat3[2] = bplxdat2[2]; + } + if (denise_planes >= 5) { + bplxdat3[4] = bplxdat2[4]; + } + if (denise_planes >= 7) { + bplxdat3[6] = bplxdat2[6]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl1o(void) +{ + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl2o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl3o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl4o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl5o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl6o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl7o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl8o(void) +{ + if (denise_planes >= 2) { + bplxdat3[1] = bplxdat2[1]; + } + if (denise_planes >= 4) { + bplxdat3[3] = bplxdat2[3]; + } + if (denise_planes >= 6) { + bplxdat3[5] = bplxdat2[5]; + } + if (denise_planes >= 8) { + bplxdat3[7] = bplxdat2[7]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl1_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl2_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl3_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl4_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl5_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl6_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl7_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + if (denise_planes >= 7) { + bplxdat3_64[6] = bplxdat2_64[6]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl8_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + if (denise_planes >= 7) { + bplxdat3_64[6] = bplxdat2_64[6]; + } + if (denise_planes >= 8) { + bplxdat3_64[7] = bplxdat2_64[7]; + } + bpldat_copy[0] = false; + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl1e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl2e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl3e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl4e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl5e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl6e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl7e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + if (denise_planes >= 7) { + bplxdat3_64[6] = bplxdat2_64[6]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl8e_64(void) +{ + if (denise_planes >= 1) { + bplxdat3_64[0] = bplxdat2_64[0]; + } + if (denise_planes >= 3) { + bplxdat3_64[2] = bplxdat2_64[2]; + } + if (denise_planes >= 5) { + bplxdat3_64[4] = bplxdat2_64[4]; + } + if (denise_planes >= 7) { + bplxdat3_64[6] = bplxdat2_64[6]; + } + bpldat_copy[0] = false; +} +STATIC_INLINE void copybpl1o_64(void) +{ + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl2o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl3o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl4o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl5o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl6o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl7o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + bpldat_copy[1] = false; +} +STATIC_INLINE void copybpl8o_64(void) +{ + if (denise_planes >= 2) { + bplxdat3_64[1] = bplxdat2_64[1]; + } + if (denise_planes >= 4) { + bplxdat3_64[3] = bplxdat2_64[3]; + } + if (denise_planes >= 6) { + bplxdat3_64[5] = bplxdat2_64[5]; + } + if (denise_planes >= 8) { + bplxdat3_64[7] = bplxdat2_64[7]; + } + bpldat_copy[1] = false; +} diff --git a/linetoscr_ecs_shres.cpp b/linetoscr_ecs_shres.cpp new file mode 100644 index 00000000..ed8ad9b0 --- /dev/null +++ b/linetoscr_ecs_shres.cpp @@ -0,0 +1,603 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_ecs_shres_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix(pix0, pix1, &dpix_val0, &dpix_val1); + get_shres_pix(pix2, pix3, &dpix_val2, &dpix_val3); + } + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_shres_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix(pix0, pix1, &dpix_val0, &dpix_val1); + get_shres_pix(pix2, pix3, &dpix_val2, &dpix_val3); + } + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + matchsprites_ecs_shres(cnt + 0); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + matchsprites_ecs_shres(cnt + 2); + if (sv0 || sv1) { + get_shres_spr_pix(sv0, sv1, &dpix_val0, &dpix_val2); + if (sv0) { + dpix_val1 = dpix_val0; + } + if (sv1) { + dpix_val3 = dpix_val2; + } + } + if (denise_pixtotal >= 0) { + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val0 = decode_denise_specials_debug(dpix_val0, cnt + 0); + } + #endif + *buf1++ = dpix_val0; + *buf2++ = dpix_val0; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val2 = decode_denise_specials_debug(dpix_val2, cnt + 2); + } + #endif + *buf1++ = dpix_val2; + *buf2++ = dpix_val2; + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_shres_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix(pix0, pix1, &dpix_val0, &dpix_val1); + get_shres_pix(pix2, pix3, &dpix_val2, &dpix_val3); + } + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + matchsprites_ecs_shres(cnt + 0); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + matchsprites_ecs_shres(cnt + 2); + if (sv0 || sv1) { + get_shres_spr_pix(sv0, sv1, &dpix_val0, &dpix_val2); + if (sv0) { + dpix_val1 = dpix_val0; + } + if (sv1) { + dpix_val3 = dpix_val2; + } + } + if (denise_pixtotal >= 0) { + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val0 = decode_denise_specials_debug(dpix_val0, cnt + 0); + } + #endif + *buf1++ = dpix_val0; + *buf2++ = dpix_val0; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val1 = decode_denise_specials_debug(dpix_val1, cnt + 1); + } + #endif + *buf1++ = dpix_val1; + *buf2++ = dpix_val1; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val2 = decode_denise_specials_debug(dpix_val2, cnt + 2); + } + #endif + *buf1++ = dpix_val2; + *buf2++ = dpix_val2; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val3 = decode_denise_specials_debug(dpix_val3, cnt + 3); + } + #endif + *buf1++ = dpix_val3; + *buf2++ = dpix_val3; + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static LINETOSRC_FUNC linetoscr_ecs_shres_funcs[] = { + lts_ecs_shres_dlores, + lts_ecs_shres_dhires, + lts_ecs_shres_dshres, +}; +static void lts_ecs_shres_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix_genlock(pix0, pix1, &dpix_val0, &dpix_val1, &gpix0, &gpix1); + get_shres_pix_genlock(pix2, pix3, &dpix_val2, &dpix_val3, &gpix2, &gpix3); + } + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_shres_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix_genlock(pix0, pix1, &dpix_val0, &dpix_val1, &gpix0, &gpix1); + get_shres_pix_genlock(pix2, pix3, &dpix_val2, &dpix_val3, &gpix2, &gpix3); + } + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + matchsprites_ecs_shres(cnt + 0); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + matchsprites_ecs_shres(cnt + 2); + if (sv0 || sv1) { + get_shres_spr_pix(sv0, sv1, &dpix_val0, &dpix_val2); + if (sv0) { + dpix_val1 = dpix_val0; + } + if (sv1) { + dpix_val3 = dpix_val2; + } + } + if (denise_pixtotal >= 0) { + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val0 = decode_denise_specials_debug(dpix_val0, cnt + 0); + } + #endif + *buf1++ = dpix_val0; + *buf2++ = dpix_val0; + *gbuf++ = gpix0; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val2 = decode_denise_specials_debug(dpix_val2, cnt + 2); + } + #endif + *buf1++ = dpix_val2; + *buf2++ = dpix_val2; + *gbuf++ = gpix2; + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_shres_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + uae_u8 pix3 = 0; + uae_u16 gpix3 = 0xffff; + uae_u32 dpix_val3 = 0; + bool shifted = false; + checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h); + if (!denise_blank_active) { + dpix_val0 = bordercolor_ecs_shres; + dpix_val1 = bordercolor_ecs_shres; + dpix_val2 = bordercolor_ecs_shres; + dpix_val3 = bordercolor_ecs_shres; + if (denise_hdiw && bpl1dat_trigger) { + shifted = true; + pix0 = getbpl2(); + shiftbpl2(); + pix1 = getbpl2(); + shiftbpl2(); + pix2 = getbpl2(); + shiftbpl2(); + pix3 = getbpl2(); + shiftbpl2(); + get_shres_pix_genlock(pix0, pix1, &dpix_val0, &dpix_val1, &gpix0, &gpix1); + get_shres_pix_genlock(pix2, pix3, &dpix_val2, &dpix_val3, &gpix2, &gpix3); + } + } + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + matchsprites_ecs_shres(cnt + 0); + uae_u32 sv1 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_ecs_shres(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv1 = svt; + } + } + matchsprites_ecs_shres(cnt + 2); + if (sv0 || sv1) { + get_shres_spr_pix(sv0, sv1, &dpix_val0, &dpix_val2); + if (sv0) { + dpix_val1 = dpix_val0; + } + if (sv1) { + dpix_val3 = dpix_val2; + } + } + if (denise_pixtotal >= 0) { + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val0 = decode_denise_specials_debug(dpix_val0, cnt + 0); + } + #endif + *buf1++ = dpix_val0; + *buf2++ = dpix_val0; + *gbuf++ = gpix0; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val1 = decode_denise_specials_debug(dpix_val1, cnt + 1); + } + #endif + *buf1++ = dpix_val1; + *buf2++ = dpix_val1; + *gbuf++ = gpix1; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val2 = decode_denise_specials_debug(dpix_val2, cnt + 2); + } + #endif + *buf1++ = dpix_val2; + *buf2++ = dpix_val2; + *gbuf++ = gpix2; + #ifdef DEBUGGER + if (decode_specials_debug) { + dpix_val3 = decode_denise_specials_debug(dpix_val3, cnt + 3); + } + #endif + *buf1++ = dpix_val3; + *buf2++ = dpix_val3; + *gbuf++ = gpix3; + } + if (!shifted) { + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + shiftbpl2(); + } + if (bpldat_copy[0] && (denise_hcounter & 3) == bplcon1_shift[0]) { + copybpl2(); + } + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static LINETOSRC_FUNC linetoscr_ecs_shres_genlock_funcs[] = { + lts_ecs_shres_dlores, + lts_ecs_shres_dhires, + lts_ecs_shres_dshres, + lts_ecs_shres_dlores_genlock, + lts_ecs_shres_dhires_genlock, + lts_ecs_shres_dshres_genlock, +}; diff --git a/linetoscr_ocs_ecs.cpp b/linetoscr_ocs_ecs.cpp new file mode 100644 index 00000000..80164331 --- /dev/null +++ b/linetoscr_ocs_ecs.cpp @@ -0,0 +1,16528 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_ecs_fm0_n0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dlores(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dlores_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dhires(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dhires_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dshres(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_spr(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dshres_spr(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_ecs_funcs[] = { + lts_ecs_fm0_n0_p2_ilores_dlores, + lts_ecs_fm0_n1_p2_ilores_dlores, + lts_ecs_fm0_dpf0_p2_ilores_dlores, + lts_ecs_fm0_dpf1_p2_ilores_dlores, + lts_ecs_fm0_ehb0_p2_ilores_dlores, + lts_ecs_fm0_ehb1_p2_ilores_dlores, + lts_ecs_fm0_ham0_p2_ilores_dlores, + lts_ecs_fm0_ham1_p2_ilores_dlores, + lts_ecs_fm0_n0_p4_ilores_dlores, + lts_ecs_fm0_n1_p4_ilores_dlores, + lts_ecs_fm0_dpf0_p4_ilores_dlores, + lts_ecs_fm0_dpf1_p4_ilores_dlores, + lts_ecs_fm0_ehb0_p4_ilores_dlores, + lts_ecs_fm0_ehb1_p4_ilores_dlores, + lts_ecs_fm0_ham0_p4_ilores_dlores, + lts_ecs_fm0_ham1_p4_ilores_dlores, + lts_ecs_fm0_n0_p5_ilores_dlores, + lts_ecs_fm0_n1_p5_ilores_dlores, + lts_ecs_fm0_dpf0_p5_ilores_dlores, + lts_ecs_fm0_dpf1_p5_ilores_dlores, + lts_ecs_fm0_ehb0_p5_ilores_dlores, + lts_ecs_fm0_ehb1_p5_ilores_dlores, + lts_ecs_fm0_ham0_p5_ilores_dlores, + lts_ecs_fm0_ham1_p5_ilores_dlores, + lts_ecs_fm0_n0_p6_ilores_dlores, + lts_ecs_fm0_n1_p6_ilores_dlores, + lts_ecs_fm0_dpf0_p6_ilores_dlores, + lts_ecs_fm0_dpf1_p6_ilores_dlores, + lts_ecs_fm0_ehb0_p6_ilores_dlores, + lts_ecs_fm0_ehb1_p6_ilores_dlores, + lts_ecs_fm0_ham0_p6_ilores_dlores, + lts_ecs_fm0_ham1_p6_ilores_dlores, + lts_ecs_fm0_n0_p2_ilores_dlores_spr, + lts_ecs_fm0_n1_p2_ilores_dlores_spr, + lts_ecs_fm0_dpf0_p2_ilores_dlores_spr, + lts_ecs_fm0_dpf1_p2_ilores_dlores_spr, + lts_ecs_fm0_ehb0_p2_ilores_dlores_spr, + lts_ecs_fm0_ehb1_p2_ilores_dlores_spr, + lts_ecs_fm0_ham0_p2_ilores_dlores_spr, + lts_ecs_fm0_ham1_p2_ilores_dlores_spr, + lts_ecs_fm0_n0_p4_ilores_dlores_spr, + lts_ecs_fm0_n1_p4_ilores_dlores_spr, + lts_ecs_fm0_dpf0_p4_ilores_dlores_spr, + lts_ecs_fm0_dpf1_p4_ilores_dlores_spr, + lts_ecs_fm0_ehb0_p4_ilores_dlores_spr, + lts_ecs_fm0_ehb1_p4_ilores_dlores_spr, + lts_ecs_fm0_ham0_p4_ilores_dlores_spr, + lts_ecs_fm0_ham1_p4_ilores_dlores_spr, + lts_ecs_fm0_n0_p5_ilores_dlores_spr, + lts_ecs_fm0_n1_p5_ilores_dlores_spr, + lts_ecs_fm0_dpf0_p5_ilores_dlores_spr, + lts_ecs_fm0_dpf1_p5_ilores_dlores_spr, + lts_ecs_fm0_ehb0_p5_ilores_dlores_spr, + lts_ecs_fm0_ehb1_p5_ilores_dlores_spr, + lts_ecs_fm0_ham0_p5_ilores_dlores_spr, + lts_ecs_fm0_ham1_p5_ilores_dlores_spr, + lts_ecs_fm0_n0_p6_ilores_dlores_spr, + lts_ecs_fm0_n1_p6_ilores_dlores_spr, + lts_ecs_fm0_dpf0_p6_ilores_dlores_spr, + lts_ecs_fm0_dpf1_p6_ilores_dlores_spr, + lts_ecs_fm0_ehb0_p6_ilores_dlores_spr, + lts_ecs_fm0_ehb1_p6_ilores_dlores_spr, + lts_ecs_fm0_ham0_p6_ilores_dlores_spr, + lts_ecs_fm0_ham1_p6_ilores_dlores_spr, + lts_ecs_fm0_n0_p2_ihires_dlores, + lts_ecs_fm0_n1_p2_ihires_dlores, + lts_ecs_fm0_dpf0_p2_ihires_dlores, + lts_ecs_fm0_dpf1_p2_ihires_dlores, + lts_ecs_fm0_ehb0_p2_ihires_dlores, + lts_ecs_fm0_ehb1_p2_ihires_dlores, + lts_ecs_fm0_ham0_p2_ihires_dlores, + lts_ecs_fm0_ham1_p2_ihires_dlores, + lts_ecs_fm0_n0_p4_ihires_dlores, + lts_ecs_fm0_n1_p4_ihires_dlores, + lts_ecs_fm0_dpf0_p4_ihires_dlores, + lts_ecs_fm0_dpf1_p4_ihires_dlores, + lts_ecs_fm0_ehb0_p4_ihires_dlores, + lts_ecs_fm0_ehb1_p4_ihires_dlores, + lts_ecs_fm0_ham0_p4_ihires_dlores, + lts_ecs_fm0_ham1_p4_ihires_dlores, + lts_ecs_fm0_n0_p5_ihires_dlores, + lts_ecs_fm0_n1_p5_ihires_dlores, + lts_ecs_fm0_dpf0_p5_ihires_dlores, + lts_ecs_fm0_dpf1_p5_ihires_dlores, + lts_ecs_fm0_ehb0_p5_ihires_dlores, + lts_ecs_fm0_ehb1_p5_ihires_dlores, + lts_ecs_fm0_ham0_p5_ihires_dlores, + lts_ecs_fm0_ham1_p5_ihires_dlores, + lts_ecs_fm0_n0_p6_ihires_dlores, + lts_ecs_fm0_n1_p6_ihires_dlores, + lts_ecs_fm0_dpf0_p6_ihires_dlores, + lts_ecs_fm0_dpf1_p6_ihires_dlores, + lts_ecs_fm0_ehb0_p6_ihires_dlores, + lts_ecs_fm0_ehb1_p6_ihires_dlores, + lts_ecs_fm0_ham0_p6_ihires_dlores, + lts_ecs_fm0_ham1_p6_ihires_dlores, + lts_ecs_fm0_n0_p2_ihires_dlores_spr, + lts_ecs_fm0_n1_p2_ihires_dlores_spr, + lts_ecs_fm0_dpf0_p2_ihires_dlores_spr, + lts_ecs_fm0_dpf1_p2_ihires_dlores_spr, + lts_ecs_fm0_ehb0_p2_ihires_dlores_spr, + lts_ecs_fm0_ehb1_p2_ihires_dlores_spr, + lts_ecs_fm0_ham0_p2_ihires_dlores_spr, + lts_ecs_fm0_ham1_p2_ihires_dlores_spr, + lts_ecs_fm0_n0_p4_ihires_dlores_spr, + lts_ecs_fm0_n1_p4_ihires_dlores_spr, + lts_ecs_fm0_dpf0_p4_ihires_dlores_spr, + lts_ecs_fm0_dpf1_p4_ihires_dlores_spr, + lts_ecs_fm0_ehb0_p4_ihires_dlores_spr, + lts_ecs_fm0_ehb1_p4_ihires_dlores_spr, + lts_ecs_fm0_ham0_p4_ihires_dlores_spr, + lts_ecs_fm0_ham1_p4_ihires_dlores_spr, + lts_ecs_fm0_n0_p5_ihires_dlores_spr, + lts_ecs_fm0_n1_p5_ihires_dlores_spr, + lts_ecs_fm0_dpf0_p5_ihires_dlores_spr, + lts_ecs_fm0_dpf1_p5_ihires_dlores_spr, + lts_ecs_fm0_ehb0_p5_ihires_dlores_spr, + lts_ecs_fm0_ehb1_p5_ihires_dlores_spr, + lts_ecs_fm0_ham0_p5_ihires_dlores_spr, + lts_ecs_fm0_ham1_p5_ihires_dlores_spr, + lts_ecs_fm0_n0_p6_ihires_dlores_spr, + lts_ecs_fm0_n1_p6_ihires_dlores_spr, + lts_ecs_fm0_dpf0_p6_ihires_dlores_spr, + lts_ecs_fm0_dpf1_p6_ihires_dlores_spr, + lts_ecs_fm0_ehb0_p6_ihires_dlores_spr, + lts_ecs_fm0_ehb1_p6_ihires_dlores_spr, + lts_ecs_fm0_ham0_p6_ihires_dlores_spr, + lts_ecs_fm0_ham1_p6_ihires_dlores_spr, + lts_ecs_fm0_n0_p2_ilores_dhires, + lts_ecs_fm0_n1_p2_ilores_dhires, + lts_ecs_fm0_dpf0_p2_ilores_dhires, + lts_ecs_fm0_dpf1_p2_ilores_dhires, + lts_ecs_fm0_ehb0_p2_ilores_dhires, + lts_ecs_fm0_ehb1_p2_ilores_dhires, + lts_ecs_fm0_ham0_p2_ilores_dhires, + lts_ecs_fm0_ham1_p2_ilores_dhires, + lts_ecs_fm0_n0_p4_ilores_dhires, + lts_ecs_fm0_n1_p4_ilores_dhires, + lts_ecs_fm0_dpf0_p4_ilores_dhires, + lts_ecs_fm0_dpf1_p4_ilores_dhires, + lts_ecs_fm0_ehb0_p4_ilores_dhires, + lts_ecs_fm0_ehb1_p4_ilores_dhires, + lts_ecs_fm0_ham0_p4_ilores_dhires, + lts_ecs_fm0_ham1_p4_ilores_dhires, + lts_ecs_fm0_n0_p5_ilores_dhires, + lts_ecs_fm0_n1_p5_ilores_dhires, + lts_ecs_fm0_dpf0_p5_ilores_dhires, + lts_ecs_fm0_dpf1_p5_ilores_dhires, + lts_ecs_fm0_ehb0_p5_ilores_dhires, + lts_ecs_fm0_ehb1_p5_ilores_dhires, + lts_ecs_fm0_ham0_p5_ilores_dhires, + lts_ecs_fm0_ham1_p5_ilores_dhires, + lts_ecs_fm0_n0_p6_ilores_dhires, + lts_ecs_fm0_n1_p6_ilores_dhires, + lts_ecs_fm0_dpf0_p6_ilores_dhires, + lts_ecs_fm0_dpf1_p6_ilores_dhires, + lts_ecs_fm0_ehb0_p6_ilores_dhires, + lts_ecs_fm0_ehb1_p6_ilores_dhires, + lts_ecs_fm0_ham0_p6_ilores_dhires, + lts_ecs_fm0_ham1_p6_ilores_dhires, + lts_ecs_fm0_n0_p2_ilores_dhires_spr, + lts_ecs_fm0_n1_p2_ilores_dhires_spr, + lts_ecs_fm0_dpf0_p2_ilores_dhires_spr, + lts_ecs_fm0_dpf1_p2_ilores_dhires_spr, + lts_ecs_fm0_ehb0_p2_ilores_dhires_spr, + lts_ecs_fm0_ehb1_p2_ilores_dhires_spr, + lts_ecs_fm0_ham0_p2_ilores_dhires_spr, + lts_ecs_fm0_ham1_p2_ilores_dhires_spr, + lts_ecs_fm0_n0_p4_ilores_dhires_spr, + lts_ecs_fm0_n1_p4_ilores_dhires_spr, + lts_ecs_fm0_dpf0_p4_ilores_dhires_spr, + lts_ecs_fm0_dpf1_p4_ilores_dhires_spr, + lts_ecs_fm0_ehb0_p4_ilores_dhires_spr, + lts_ecs_fm0_ehb1_p4_ilores_dhires_spr, + lts_ecs_fm0_ham0_p4_ilores_dhires_spr, + lts_ecs_fm0_ham1_p4_ilores_dhires_spr, + lts_ecs_fm0_n0_p5_ilores_dhires_spr, + lts_ecs_fm0_n1_p5_ilores_dhires_spr, + lts_ecs_fm0_dpf0_p5_ilores_dhires_spr, + lts_ecs_fm0_dpf1_p5_ilores_dhires_spr, + lts_ecs_fm0_ehb0_p5_ilores_dhires_spr, + lts_ecs_fm0_ehb1_p5_ilores_dhires_spr, + lts_ecs_fm0_ham0_p5_ilores_dhires_spr, + lts_ecs_fm0_ham1_p5_ilores_dhires_spr, + lts_ecs_fm0_n0_p6_ilores_dhires_spr, + lts_ecs_fm0_n1_p6_ilores_dhires_spr, + lts_ecs_fm0_dpf0_p6_ilores_dhires_spr, + lts_ecs_fm0_dpf1_p6_ilores_dhires_spr, + lts_ecs_fm0_ehb0_p6_ilores_dhires_spr, + lts_ecs_fm0_ehb1_p6_ilores_dhires_spr, + lts_ecs_fm0_ham0_p6_ilores_dhires_spr, + lts_ecs_fm0_ham1_p6_ilores_dhires_spr, + lts_ecs_fm0_n0_p2_ihires_dhires, + lts_ecs_fm0_n1_p2_ihires_dhires, + lts_ecs_fm0_dpf0_p2_ihires_dhires, + lts_ecs_fm0_dpf1_p2_ihires_dhires, + lts_ecs_fm0_ehb0_p2_ihires_dhires, + lts_ecs_fm0_ehb1_p2_ihires_dhires, + lts_ecs_fm0_ham0_p2_ihires_dhires, + lts_ecs_fm0_ham1_p2_ihires_dhires, + lts_ecs_fm0_n0_p4_ihires_dhires, + lts_ecs_fm0_n1_p4_ihires_dhires, + lts_ecs_fm0_dpf0_p4_ihires_dhires, + lts_ecs_fm0_dpf1_p4_ihires_dhires, + lts_ecs_fm0_ehb0_p4_ihires_dhires, + lts_ecs_fm0_ehb1_p4_ihires_dhires, + lts_ecs_fm0_ham0_p4_ihires_dhires, + lts_ecs_fm0_ham1_p4_ihires_dhires, + lts_ecs_fm0_n0_p5_ihires_dhires, + lts_ecs_fm0_n1_p5_ihires_dhires, + lts_ecs_fm0_dpf0_p5_ihires_dhires, + lts_ecs_fm0_dpf1_p5_ihires_dhires, + lts_ecs_fm0_ehb0_p5_ihires_dhires, + lts_ecs_fm0_ehb1_p5_ihires_dhires, + lts_ecs_fm0_ham0_p5_ihires_dhires, + lts_ecs_fm0_ham1_p5_ihires_dhires, + lts_ecs_fm0_n0_p6_ihires_dhires, + lts_ecs_fm0_n1_p6_ihires_dhires, + lts_ecs_fm0_dpf0_p6_ihires_dhires, + lts_ecs_fm0_dpf1_p6_ihires_dhires, + lts_ecs_fm0_ehb0_p6_ihires_dhires, + lts_ecs_fm0_ehb1_p6_ihires_dhires, + lts_ecs_fm0_ham0_p6_ihires_dhires, + lts_ecs_fm0_ham1_p6_ihires_dhires, + lts_ecs_fm0_n0_p2_ihires_dhires_spr, + lts_ecs_fm0_n1_p2_ihires_dhires_spr, + lts_ecs_fm0_dpf0_p2_ihires_dhires_spr, + lts_ecs_fm0_dpf1_p2_ihires_dhires_spr, + lts_ecs_fm0_ehb0_p2_ihires_dhires_spr, + lts_ecs_fm0_ehb1_p2_ihires_dhires_spr, + lts_ecs_fm0_ham0_p2_ihires_dhires_spr, + lts_ecs_fm0_ham1_p2_ihires_dhires_spr, + lts_ecs_fm0_n0_p4_ihires_dhires_spr, + lts_ecs_fm0_n1_p4_ihires_dhires_spr, + lts_ecs_fm0_dpf0_p4_ihires_dhires_spr, + lts_ecs_fm0_dpf1_p4_ihires_dhires_spr, + lts_ecs_fm0_ehb0_p4_ihires_dhires_spr, + lts_ecs_fm0_ehb1_p4_ihires_dhires_spr, + lts_ecs_fm0_ham0_p4_ihires_dhires_spr, + lts_ecs_fm0_ham1_p4_ihires_dhires_spr, + lts_ecs_fm0_n0_p5_ihires_dhires_spr, + lts_ecs_fm0_n1_p5_ihires_dhires_spr, + lts_ecs_fm0_dpf0_p5_ihires_dhires_spr, + lts_ecs_fm0_dpf1_p5_ihires_dhires_spr, + lts_ecs_fm0_ehb0_p5_ihires_dhires_spr, + lts_ecs_fm0_ehb1_p5_ihires_dhires_spr, + lts_ecs_fm0_ham0_p5_ihires_dhires_spr, + lts_ecs_fm0_ham1_p5_ihires_dhires_spr, + lts_ecs_fm0_n0_p6_ihires_dhires_spr, + lts_ecs_fm0_n1_p6_ihires_dhires_spr, + lts_ecs_fm0_dpf0_p6_ihires_dhires_spr, + lts_ecs_fm0_dpf1_p6_ihires_dhires_spr, + lts_ecs_fm0_ehb0_p6_ihires_dhires_spr, + lts_ecs_fm0_ehb1_p6_ihires_dhires_spr, + lts_ecs_fm0_ham0_p6_ihires_dhires_spr, + lts_ecs_fm0_ham1_p6_ihires_dhires_spr, + lts_ecs_fm0_n0_p2_ilores_dshres, + lts_ecs_fm0_n1_p2_ilores_dshres, + lts_ecs_fm0_dpf0_p2_ilores_dshres, + lts_ecs_fm0_dpf1_p2_ilores_dshres, + lts_ecs_fm0_ehb0_p2_ilores_dshres, + lts_ecs_fm0_ehb1_p2_ilores_dshres, + lts_ecs_fm0_ham0_p2_ilores_dshres, + lts_ecs_fm0_ham1_p2_ilores_dshres, + lts_ecs_fm0_n0_p4_ilores_dshres, + lts_ecs_fm0_n1_p4_ilores_dshres, + lts_ecs_fm0_dpf0_p4_ilores_dshres, + lts_ecs_fm0_dpf1_p4_ilores_dshres, + lts_ecs_fm0_ehb0_p4_ilores_dshres, + lts_ecs_fm0_ehb1_p4_ilores_dshres, + lts_ecs_fm0_ham0_p4_ilores_dshres, + lts_ecs_fm0_ham1_p4_ilores_dshres, + lts_ecs_fm0_n0_p5_ilores_dshres, + lts_ecs_fm0_n1_p5_ilores_dshres, + lts_ecs_fm0_dpf0_p5_ilores_dshres, + lts_ecs_fm0_dpf1_p5_ilores_dshres, + lts_ecs_fm0_ehb0_p5_ilores_dshres, + lts_ecs_fm0_ehb1_p5_ilores_dshres, + lts_ecs_fm0_ham0_p5_ilores_dshres, + lts_ecs_fm0_ham1_p5_ilores_dshres, + lts_ecs_fm0_n0_p6_ilores_dshres, + lts_ecs_fm0_n1_p6_ilores_dshres, + lts_ecs_fm0_dpf0_p6_ilores_dshres, + lts_ecs_fm0_dpf1_p6_ilores_dshres, + lts_ecs_fm0_ehb0_p6_ilores_dshres, + lts_ecs_fm0_ehb1_p6_ilores_dshres, + lts_ecs_fm0_ham0_p6_ilores_dshres, + lts_ecs_fm0_ham1_p6_ilores_dshres, + lts_ecs_fm0_n0_p2_ilores_dshres_spr, + lts_ecs_fm0_n1_p2_ilores_dshres_spr, + lts_ecs_fm0_dpf0_p2_ilores_dshres_spr, + lts_ecs_fm0_dpf1_p2_ilores_dshres_spr, + lts_ecs_fm0_ehb0_p2_ilores_dshres_spr, + lts_ecs_fm0_ehb1_p2_ilores_dshres_spr, + lts_ecs_fm0_ham0_p2_ilores_dshres_spr, + lts_ecs_fm0_ham1_p2_ilores_dshres_spr, + lts_ecs_fm0_n0_p4_ilores_dshres_spr, + lts_ecs_fm0_n1_p4_ilores_dshres_spr, + lts_ecs_fm0_dpf0_p4_ilores_dshres_spr, + lts_ecs_fm0_dpf1_p4_ilores_dshres_spr, + lts_ecs_fm0_ehb0_p4_ilores_dshres_spr, + lts_ecs_fm0_ehb1_p4_ilores_dshres_spr, + lts_ecs_fm0_ham0_p4_ilores_dshres_spr, + lts_ecs_fm0_ham1_p4_ilores_dshres_spr, + lts_ecs_fm0_n0_p5_ilores_dshres_spr, + lts_ecs_fm0_n1_p5_ilores_dshres_spr, + lts_ecs_fm0_dpf0_p5_ilores_dshres_spr, + lts_ecs_fm0_dpf1_p5_ilores_dshres_spr, + lts_ecs_fm0_ehb0_p5_ilores_dshres_spr, + lts_ecs_fm0_ehb1_p5_ilores_dshres_spr, + lts_ecs_fm0_ham0_p5_ilores_dshres_spr, + lts_ecs_fm0_ham1_p5_ilores_dshres_spr, + lts_ecs_fm0_n0_p6_ilores_dshres_spr, + lts_ecs_fm0_n1_p6_ilores_dshres_spr, + lts_ecs_fm0_dpf0_p6_ilores_dshres_spr, + lts_ecs_fm0_dpf1_p6_ilores_dshres_spr, + lts_ecs_fm0_ehb0_p6_ilores_dshres_spr, + lts_ecs_fm0_ehb1_p6_ilores_dshres_spr, + lts_ecs_fm0_ham0_p6_ilores_dshres_spr, + lts_ecs_fm0_ham1_p6_ilores_dshres_spr, + lts_ecs_fm0_n0_p2_ihires_dshres, + lts_ecs_fm0_n1_p2_ihires_dshres, + lts_ecs_fm0_dpf0_p2_ihires_dshres, + lts_ecs_fm0_dpf1_p2_ihires_dshres, + lts_ecs_fm0_ehb0_p2_ihires_dshres, + lts_ecs_fm0_ehb1_p2_ihires_dshres, + lts_ecs_fm0_ham0_p2_ihires_dshres, + lts_ecs_fm0_ham1_p2_ihires_dshres, + lts_ecs_fm0_n0_p4_ihires_dshres, + lts_ecs_fm0_n1_p4_ihires_dshres, + lts_ecs_fm0_dpf0_p4_ihires_dshres, + lts_ecs_fm0_dpf1_p4_ihires_dshres, + lts_ecs_fm0_ehb0_p4_ihires_dshres, + lts_ecs_fm0_ehb1_p4_ihires_dshres, + lts_ecs_fm0_ham0_p4_ihires_dshres, + lts_ecs_fm0_ham1_p4_ihires_dshres, + lts_ecs_fm0_n0_p5_ihires_dshres, + lts_ecs_fm0_n1_p5_ihires_dshres, + lts_ecs_fm0_dpf0_p5_ihires_dshres, + lts_ecs_fm0_dpf1_p5_ihires_dshres, + lts_ecs_fm0_ehb0_p5_ihires_dshres, + lts_ecs_fm0_ehb1_p5_ihires_dshres, + lts_ecs_fm0_ham0_p5_ihires_dshres, + lts_ecs_fm0_ham1_p5_ihires_dshres, + lts_ecs_fm0_n0_p6_ihires_dshres, + lts_ecs_fm0_n1_p6_ihires_dshres, + lts_ecs_fm0_dpf0_p6_ihires_dshres, + lts_ecs_fm0_dpf1_p6_ihires_dshres, + lts_ecs_fm0_ehb0_p6_ihires_dshres, + lts_ecs_fm0_ehb1_p6_ihires_dshres, + lts_ecs_fm0_ham0_p6_ihires_dshres, + lts_ecs_fm0_ham1_p6_ihires_dshres, + lts_ecs_fm0_n0_p2_ihires_dshres_spr, + lts_ecs_fm0_n1_p2_ihires_dshres_spr, + lts_ecs_fm0_dpf0_p2_ihires_dshres_spr, + lts_ecs_fm0_dpf1_p2_ihires_dshres_spr, + lts_ecs_fm0_ehb0_p2_ihires_dshres_spr, + lts_ecs_fm0_ehb1_p2_ihires_dshres_spr, + lts_ecs_fm0_ham0_p2_ihires_dshres_spr, + lts_ecs_fm0_ham1_p2_ihires_dshres_spr, + lts_ecs_fm0_n0_p4_ihires_dshres_spr, + lts_ecs_fm0_n1_p4_ihires_dshres_spr, + lts_ecs_fm0_dpf0_p4_ihires_dshres_spr, + lts_ecs_fm0_dpf1_p4_ihires_dshres_spr, + lts_ecs_fm0_ehb0_p4_ihires_dshres_spr, + lts_ecs_fm0_ehb1_p4_ihires_dshres_spr, + lts_ecs_fm0_ham0_p4_ihires_dshres_spr, + lts_ecs_fm0_ham1_p4_ihires_dshres_spr, + lts_ecs_fm0_n0_p5_ihires_dshres_spr, + lts_ecs_fm0_n1_p5_ihires_dshres_spr, + lts_ecs_fm0_dpf0_p5_ihires_dshres_spr, + lts_ecs_fm0_dpf1_p5_ihires_dshres_spr, + lts_ecs_fm0_ehb0_p5_ihires_dshres_spr, + lts_ecs_fm0_ehb1_p5_ihires_dshres_spr, + lts_ecs_fm0_ham0_p5_ihires_dshres_spr, + lts_ecs_fm0_ham1_p5_ihires_dshres_spr, + lts_ecs_fm0_n0_p6_ihires_dshres_spr, + lts_ecs_fm0_n1_p6_ihires_dshres_spr, + lts_ecs_fm0_dpf0_p6_ihires_dshres_spr, + lts_ecs_fm0_dpf1_p6_ihires_dshres_spr, + lts_ecs_fm0_ehb0_p6_ihires_dshres_spr, + lts_ecs_fm0_ehb1_p6_ihires_dshres_spr, + lts_ecs_fm0_ham0_p6_ihires_dshres_spr, + lts_ecs_fm0_ham1_p6_ihires_dshres_spr, +}; diff --git a/linetoscr_ocs_ecs_genlock.cpp b/linetoscr_ocs_ecs_genlock.cpp new file mode 100644 index 00000000..1b5e7238 --- /dev/null +++ b/linetoscr_ocs_ecs_genlock.cpp @@ -0,0 +1,7064 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_ecs_fm0_n0_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + uae_u32 t0 = 0; + if (!extblank) { + t0 = dpix_val0; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = gpix0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dpix_val1; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = gpix1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dpix_val2; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = gpix2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dpix_val3; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = gpix3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_spr_genlock(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_ecs_genlock_funcs[] = { + lts_ecs_fm0_n0_p6_ilores_dlores_genlock, + lts_ecs_fm0_n1_p6_ilores_dlores_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dlores_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dlores_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dlores_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dlores_genlock, + lts_ecs_fm0_ham0_p6_ilores_dlores_genlock, + lts_ecs_fm0_ham1_p6_ilores_dlores_genlock, + lts_ecs_fm0_n0_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_n1_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_ham0_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_ham1_p6_ilores_dlores_spr_genlock, + lts_ecs_fm0_n0_p4_ihires_dlores_genlock, + lts_ecs_fm0_n1_p4_ihires_dlores_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dlores_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dlores_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dlores_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dlores_genlock, + lts_ecs_fm0_ham0_p4_ihires_dlores_genlock, + lts_ecs_fm0_ham1_p4_ihires_dlores_genlock, + lts_ecs_fm0_n0_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_n1_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_ham0_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_ham1_p4_ihires_dlores_spr_genlock, + lts_ecs_fm0_n0_p6_ilores_dhires_genlock, + lts_ecs_fm0_n1_p6_ilores_dhires_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dhires_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dhires_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dhires_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dhires_genlock, + lts_ecs_fm0_ham0_p6_ilores_dhires_genlock, + lts_ecs_fm0_ham1_p6_ilores_dhires_genlock, + lts_ecs_fm0_n0_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_n1_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_ham0_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_ham1_p6_ilores_dhires_spr_genlock, + lts_ecs_fm0_n0_p4_ihires_dhires_genlock, + lts_ecs_fm0_n1_p4_ihires_dhires_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dhires_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dhires_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dhires_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dhires_genlock, + lts_ecs_fm0_ham0_p4_ihires_dhires_genlock, + lts_ecs_fm0_ham1_p4_ihires_dhires_genlock, + lts_ecs_fm0_n0_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_n1_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_ham0_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_ham1_p4_ihires_dhires_spr_genlock, + lts_ecs_fm0_n0_p6_ilores_dshres_genlock, + lts_ecs_fm0_n1_p6_ilores_dshres_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dshres_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dshres_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dshres_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dshres_genlock, + lts_ecs_fm0_ham0_p6_ilores_dshres_genlock, + lts_ecs_fm0_ham1_p6_ilores_dshres_genlock, + lts_ecs_fm0_n0_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_n1_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_ham0_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_ham1_p6_ilores_dshres_spr_genlock, + lts_ecs_fm0_n0_p4_ihires_dshres_genlock, + lts_ecs_fm0_n1_p4_ihires_dshres_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dshres_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dshres_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dshres_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dshres_genlock, + lts_ecs_fm0_ham0_p4_ihires_dshres_genlock, + lts_ecs_fm0_ham1_p4_ihires_dshres_genlock, + lts_ecs_fm0_n0_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_n1_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_ham0_p4_ihires_dshres_spr_genlock, + lts_ecs_fm0_ham1_p4_ihires_dshres_spr_genlock, +}; diff --git a/linetoscr_ocs_ecs_ntsc.cpp b/linetoscr_ocs_ecs_ntsc.cpp new file mode 100644 index 00000000..4c8c8110 --- /dev/null +++ b/linetoscr_ocs_ecs_ntsc.cpp @@ -0,0 +1,16948 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_ecs_fm0_n0_p2_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dlores_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + } + } + dtbuf[h][0] = dpix_val0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dlores_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dhires_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl2(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl2(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dhires_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p5_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ilores_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p5_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl5(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl5(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl5e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl5o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p2_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dshres_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p2_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p2_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p2_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p2_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl2(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl2(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl2(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl2(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl2e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl2o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p2_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p2_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p2_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p2_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_ntsc(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtbuf[h][1] = dpix_val1; + dtbuf[h][2] = dpix_val2; + dtbuf[h][3] = dpix_val3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p5_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n1_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf0_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_dpf1_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb0_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p6_ihires_dshres_spr_ntsc(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_ecs_ntsc_funcs[] = { + lts_ecs_fm0_n0_p2_ilores_dlores_ntsc, + lts_ecs_fm0_n1_p2_ilores_dlores_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dlores_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dlores_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dlores_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dlores_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dlores_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dlores_ntsc, + lts_ecs_fm0_n0_p4_ilores_dlores_ntsc, + lts_ecs_fm0_n1_p4_ilores_dlores_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dlores_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dlores_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dlores_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dlores_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dlores_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dlores_ntsc, + lts_ecs_fm0_n0_p5_ilores_dlores_ntsc, + lts_ecs_fm0_n1_p5_ilores_dlores_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dlores_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dlores_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dlores_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dlores_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dlores_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dlores_ntsc, + lts_ecs_fm0_n0_p6_ilores_dlores_ntsc, + lts_ecs_fm0_n1_p6_ilores_dlores_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dlores_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dlores_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dlores_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dlores_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dlores_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dlores_ntsc, + lts_ecs_fm0_n0_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n1_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n0_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n1_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n0_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n1_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n0_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n1_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dlores_spr_ntsc, + lts_ecs_fm0_n0_p2_ihires_dlores_ntsc, + lts_ecs_fm0_n1_p2_ihires_dlores_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dlores_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dlores_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dlores_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dlores_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dlores_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dlores_ntsc, + lts_ecs_fm0_n0_p4_ihires_dlores_ntsc, + lts_ecs_fm0_n1_p4_ihires_dlores_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dlores_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dlores_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dlores_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dlores_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dlores_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dlores_ntsc, + lts_ecs_fm0_n0_p5_ihires_dlores_ntsc, + lts_ecs_fm0_n1_p5_ihires_dlores_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dlores_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dlores_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dlores_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dlores_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dlores_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dlores_ntsc, + lts_ecs_fm0_n0_p6_ihires_dlores_ntsc, + lts_ecs_fm0_n1_p6_ihires_dlores_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dlores_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dlores_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dlores_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dlores_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dlores_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dlores_ntsc, + lts_ecs_fm0_n0_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n1_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n0_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n1_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n0_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n1_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n0_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n1_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dlores_spr_ntsc, + lts_ecs_fm0_n0_p2_ilores_dhires_ntsc, + lts_ecs_fm0_n1_p2_ilores_dhires_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dhires_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dhires_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dhires_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dhires_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dhires_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dhires_ntsc, + lts_ecs_fm0_n0_p4_ilores_dhires_ntsc, + lts_ecs_fm0_n1_p4_ilores_dhires_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dhires_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dhires_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dhires_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dhires_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dhires_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dhires_ntsc, + lts_ecs_fm0_n0_p5_ilores_dhires_ntsc, + lts_ecs_fm0_n1_p5_ilores_dhires_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dhires_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dhires_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dhires_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dhires_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dhires_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dhires_ntsc, + lts_ecs_fm0_n0_p6_ilores_dhires_ntsc, + lts_ecs_fm0_n1_p6_ilores_dhires_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dhires_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dhires_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dhires_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dhires_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dhires_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dhires_ntsc, + lts_ecs_fm0_n0_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n1_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n0_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n1_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n0_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n1_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n0_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n1_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dhires_spr_ntsc, + lts_ecs_fm0_n0_p2_ihires_dhires_ntsc, + lts_ecs_fm0_n1_p2_ihires_dhires_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dhires_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dhires_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dhires_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dhires_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dhires_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dhires_ntsc, + lts_ecs_fm0_n0_p4_ihires_dhires_ntsc, + lts_ecs_fm0_n1_p4_ihires_dhires_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dhires_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dhires_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dhires_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dhires_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dhires_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dhires_ntsc, + lts_ecs_fm0_n0_p5_ihires_dhires_ntsc, + lts_ecs_fm0_n1_p5_ihires_dhires_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dhires_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dhires_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dhires_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dhires_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dhires_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dhires_ntsc, + lts_ecs_fm0_n0_p6_ihires_dhires_ntsc, + lts_ecs_fm0_n1_p6_ihires_dhires_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dhires_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dhires_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dhires_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dhires_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dhires_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dhires_ntsc, + lts_ecs_fm0_n0_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n1_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n0_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n1_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n0_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n1_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n0_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n1_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dhires_spr_ntsc, + lts_ecs_fm0_n0_p2_ilores_dshres_ntsc, + lts_ecs_fm0_n1_p2_ilores_dshres_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dshres_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dshres_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dshres_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dshres_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dshres_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dshres_ntsc, + lts_ecs_fm0_n0_p4_ilores_dshres_ntsc, + lts_ecs_fm0_n1_p4_ilores_dshres_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dshres_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dshres_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dshres_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dshres_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dshres_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dshres_ntsc, + lts_ecs_fm0_n0_p5_ilores_dshres_ntsc, + lts_ecs_fm0_n1_p5_ilores_dshres_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dshres_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dshres_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dshres_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dshres_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dshres_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dshres_ntsc, + lts_ecs_fm0_n0_p6_ilores_dshres_ntsc, + lts_ecs_fm0_n1_p6_ilores_dshres_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dshres_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dshres_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dshres_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dshres_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dshres_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dshres_ntsc, + lts_ecs_fm0_n0_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n1_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p2_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n0_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n1_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p4_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n0_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n1_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p5_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n0_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n1_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p6_ilores_dshres_spr_ntsc, + lts_ecs_fm0_n0_p2_ihires_dshres_ntsc, + lts_ecs_fm0_n1_p2_ihires_dshres_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dshres_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dshres_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dshres_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dshres_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dshres_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dshres_ntsc, + lts_ecs_fm0_n0_p4_ihires_dshres_ntsc, + lts_ecs_fm0_n1_p4_ihires_dshres_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dshres_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dshres_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dshres_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dshres_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dshres_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dshres_ntsc, + lts_ecs_fm0_n0_p5_ihires_dshres_ntsc, + lts_ecs_fm0_n1_p5_ihires_dshres_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dshres_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dshres_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dshres_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dshres_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dshres_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dshres_ntsc, + lts_ecs_fm0_n0_p6_ihires_dshres_ntsc, + lts_ecs_fm0_n1_p6_ihires_dshres_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dshres_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dshres_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dshres_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dshres_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dshres_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dshres_ntsc, + lts_ecs_fm0_n0_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n1_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p2_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n0_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n1_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p4_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n0_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n1_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p5_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n0_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_n1_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf0_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_dpf1_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb0_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ehb1_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham0_p6_ihires_dshres_spr_ntsc, + lts_ecs_fm0_ham1_p6_ihires_dshres_spr_ntsc, +}; diff --git a/linetoscr_ocs_ecs_ntsc_genlock.cpp b/linetoscr_ocs_ecs_ntsc_genlock.cpp new file mode 100644 index 00000000..536359b5 --- /dev/null +++ b/linetoscr_ocs_ecs_ntsc_genlock.cpp @@ -0,0 +1,7400 @@ +/* +* UAE - The portable Amiga emulator. +* +* This file was generated by genlinetoscr. Don't edit. +*/ + +static void lts_ecs_fm0_n0_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dlores_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + dpix_val1 = denise_colors.acolors[pix1]; + gpix1 = get_genlock_transparency(pix1); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix1 = 0; + uae_u16 gpix1 = 0xffff; + uae_u32 dpix_val1 = 0; + if (!denise_blank_active) { + gpix1 = get_genlock_transparency_border(); + dpix_val1 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix1 = getbpl4(); + clxdat |= bplcoltable[pix1]; + uae_u8 val1 = dpf_lookup[pix1]; + dpix_val1 = denise_colors.acolors[val1]; + gpix1 = get_genlock_transparency(dpf_lookup[pix1]); + } + last_bpl_pix = pix1; + } + shiftbpl4(); + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 2); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dhires_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + pix0 &= bplehb_mask; + if (pix0 <= 31) { + dpix_val0 = denise_colors.acolors[pix0]; + } else { + dpix_val0 = p_xcolors[(denise_colors.color_regs_ecs[pix0 - 32] >> 1) & 0x777]; + } + gpix0 = get_genlock_transparency(pix0 & 31); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham0_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ham1_p6_ilores_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl6(); + clxdat |= bplcoltable[pix0]; + if (decode_specials) { + pix0 = decode_denise_specials(pix0); + } + dpix_val0 = decode_ham_pixel(pix0); + gpix0 = get_genlock_transparency(pix0 & 15); + } + last_bpl_pix = pix0; + } + shiftbpl6(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val2 = dpix_val1; + uae_u8 pix2 = pix1; + uae_u16 gpix2 = gpix1; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 15) == bplcon1_shift[0]) { + copybpl6e(); + } + if (bpldat_copy[1] && (denise_hcounter & 15) == bplcon1_shift[1]) { + copybpl6o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_n0_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_n1_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + dpix_val0 = denise_colors.acolors[pix0]; + gpix0 = get_genlock_transparency(pix0); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + dpix_val2 = denise_colors.acolors[pix2]; + gpix2 = get_genlock_transparency(pix2); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + while (denise_cck < denise_total) { + do_denise_cck(denise_linecnt, denise_startpos, denise_cck); + if (lts_changed) return; + for (int h = 0; h < 2; h++) { + if (h) { + denise_hcounter_next = denise_hcounter_new; + } + int cnt = denise_hcounter << 2; + if (checkhorizontal1_ecs(denise_hcounter, denise_hcounter_next, h)) continue; + matchsprites(cnt + 0); + uae_u8 pix0 = 0; + uae_u16 gpix0 = 0xffff; + uae_u32 dpix_val0 = 0; + if (!denise_blank_active) { + gpix0 = get_genlock_transparency_border(); + dpix_val0 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix0 = getbpl4(); + clxdat |= bplcoltable[pix0]; + uae_u8 val0 = dpf_lookup[pix0]; + dpix_val0 = denise_colors.acolors[val0]; + gpix0 = get_genlock_transparency(dpf_lookup[pix0]); + } + last_bpl_pix = pix0; + } + shiftbpl4(); + uae_u32 sv0 = 0; + if (denise_spr_nr_armeds) { + uae_u32 svt; + svt = denise_render_sprites_lores(); + if (!denise_sprite_blank_active && !sprites_hidden) { + sv0 = svt; + } + } + uae_u8 pix2 = 0; + uae_u16 gpix2 = 0xffff; + uae_u32 dpix_val2 = 0; + if (!denise_blank_active) { + gpix2 = get_genlock_transparency_border(); + dpix_val2 = bordercolor; + if (denise_hdiw && bpl1dat_trigger) { + pix2 = getbpl4(); + clxdat |= bplcoltable[pix2]; + uae_u8 val2 = dpf_lookup[pix2]; + dpix_val2 = denise_colors.acolors[val2]; + gpix2 = get_genlock_transparency(dpf_lookup[pix2]); + } + last_bpl_pix = pix2; + } + shiftbpl4(); + uae_u32 dpix_val1 = dpix_val0; + uae_u8 pix1 = pix0; + uae_u16 gpix1 = gpix0; + uae_u32 dpix_val3 = dpix_val2; + uae_u8 pix3 = pix2; + uae_u16 gpix3 = gpix2; + if (denise_pixtotal >= 0) { + if (sv0) { + uae_u32 spix0 = denise_render_sprites2(pix0, sv0); + if (spix0) { + dpix_val0 = denise_colors.acolors[spix0]; + gpix0 = get_genlock_transparency(spix0); + + dpix_val1 = dpix_val0; + dpix_val2 = dpix_val0; + dpix_val3 = dpix_val0; + } + } + dtbuf[h][0] = dpix_val0; + dtgbuf[h][0] = gpix0; + dtbuf[h][1] = dpix_val1; + dtgbuf[h][1] = gpix1; + dtbuf[h][2] = dpix_val2; + dtgbuf[h][2] = gpix2; + dtbuf[h][3] = dpix_val3; + dtgbuf[h][3] = gpix3; + uae_u32 t0 = 0; + if (!extblank) { + t0 = dtbuf[h ^ lol][0]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t0 = decode_denise_specials_debug(t0, cnt + 0); + } + #endif + *buf1++ = t0; + *buf2++ = t0; + *gbuf++ = dtgbuf[h ^ lol][0]; + uae_u32 t1 = 0; + if (!extblank) { + t1 = dtbuf[h ^ lol][1]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t1 = decode_denise_specials_debug(t1, cnt + 1); + } + #endif + *buf1++ = t1; + *buf2++ = t1; + *gbuf++ = dtgbuf[h ^ lol][1]; + uae_u32 t2 = 0; + if (!extblank) { + t2 = dtbuf[h ^ lol][2]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t2 = decode_denise_specials_debug(t2, cnt + 2); + } + #endif + *buf1++ = t2; + *buf2++ = t2; + *gbuf++ = dtgbuf[h ^ lol][2]; + uae_u32 t3 = 0; + if (!extblank) { + t3 = dtbuf[h ^ lol][3]; + } + #ifdef DEBUGGER + if (decode_specials_debug) { + t3 = decode_denise_specials_debug(t3, cnt + 3); + } + #endif + *buf1++ = t3; + *buf2++ = t3; + *gbuf++ = dtgbuf[h ^ lol][3]; + } + if (bpldat_copy[0] && (denise_hcounter & 7) == bplcon1_shift[0]) { + copybpl4e(); + } + if (bpldat_copy[1] && (denise_hcounter & 7) == bplcon1_shift[1]) { + copybpl4o(); + } + sprites_hidden = sprites_hidden2; + #ifdef DEBUGGER + *debug_dma_dhpos_odd = denise_hcounter; + #endif + denise_hcounter++; + denise_hcounter &= 511; + denise_hcounter_next++; + denise_hcounter_next &= 511; + } + denise_pixtotal--; + denise_hcounter = denise_hcounter_new; + denise_cck++; + } +} +static void lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham0_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + lts_null(); +} +static void lts_ecs_fm0_ham1_p4_ihires_dshres_spr_ntsc_genlock(void) +{ + lts_null(); +} +static LINETOSRC_FUNC linetoscr_ecs_ntsc_genlock_funcs[] = { + lts_ecs_fm0_n0_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dlores_ntsc_genlock, + lts_ecs_fm0_n0_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dlores_spr_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dlores_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dlores_spr_ntsc_genlock, + lts_ecs_fm0_n0_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dhires_ntsc_genlock, + lts_ecs_fm0_n0_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dhires_spr_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dhires_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dhires_spr_ntsc_genlock, + lts_ecs_fm0_n0_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dshres_ntsc_genlock, + lts_ecs_fm0_n0_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_n1_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p6_ilores_dshres_spr_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dshres_ntsc_genlock, + lts_ecs_fm0_n0_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_n1_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_dpf0_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_dpf1_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ehb0_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ehb1_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ham0_p4_ihires_dshres_spr_ntsc_genlock, + lts_ecs_fm0_ham1_p4_ihires_dshres_spr_ntsc_genlock, +}; diff --git a/newcpu.cpp b/newcpu.cpp index 42f5d3a2..a4cfb941 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -809,7 +809,7 @@ static void cputracefunc2_x_do_cycles_post (int cycles, uae_u32 v) static void do_cycles_post (int cycles, uae_u32 v) { - do_cycles (cycles); + do_cycles(cycles); } static void do_cycles_ce_post (int cycles, uae_u32 v) { @@ -3406,7 +3406,7 @@ static void ExceptionX (int nr, uaecptr address, uaecptr oldpc) #ifdef DEBUGGER if (debug_dma) { - record_dma_event_data(DMA_EVENT_CPUINS, current_hpos(), vpos, 0x20000); + record_dma_event_data(DMA_EVENT_CPUINS, 0x20000); } #endif if (cpu_tracer) { @@ -3494,7 +3494,7 @@ static void do_interrupt (int nr) { #ifdef DEBUGGER if (debug_dma) - record_dma_event(DMA_EVENT_CPUIRQ, current_hpos (), vpos); + record_dma_event(DMA_EVENT_CPUIRQ); #endif if (inputrecord_debug & 2) { if (input_record > 0) @@ -4349,8 +4349,6 @@ static bool haltloop_do(int vsynctimeline, frame_time_t rpt_end, int lines) ppc_interrupt(intlev()); uae_ppc_execute_check(); #endif - if (regs.spcflags & SPCFLAG_COPPER) - do_copper(); if (regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE)) { if (regs.spcflags & SPCFLAG_BRK) { unset_special(SPCFLAG_BRK); @@ -4407,8 +4405,6 @@ static bool haltloop(void) event_wait = false; for (i = 0; i < ev_max; i++) { - if (i == ev_hsync) - continue; if (i == ev_audio) continue; if (!eventtab[i].active) @@ -4451,9 +4447,6 @@ static bool haltloop(void) prevvpos = 1; x_do_cycles(8 * CYCLE_UNIT); - if (regs.spcflags & SPCFLAG_COPPER) - do_copper(); - if (regs.spcflags) { if ((regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) return true; @@ -4561,7 +4554,7 @@ static void update_ipl(int ipl) } #ifdef DEBUGGER if (debug_dma) { - record_dma_ipl(current_hpos(), vpos); + record_dma_ipl(); } #endif } @@ -4628,9 +4621,9 @@ static void check_debugger(void) static void debug_cpu_stop(void) { #ifdef DEBUGGER - record_dma_event(DMA_EVENT_CPUSTOP, current_hpos(), vpos); + record_dma_event(DMA_EVENT_CPUSTOP); if (time_for_interrupt()) { - record_dma_event(DMA_EVENT_CPUSTOPIPL, current_hpos(), vpos); + record_dma_event(DMA_EVENT_CPUSTOPIPL); } #endif } @@ -4658,9 +4651,6 @@ static int do_specialties (int cycles) while (vsynccnt > 0 && !quit_program) { x_do_cycles(8 * CYCLE_UNIT); spcflags = regs.spcflags; - if (spcflags & SPCFLAG_COPPER) { - do_copper(); - } if (vsync_counter != vsyncstate) { vsyncstate = vsync_counter; vsynccnt--; @@ -4704,10 +4694,6 @@ static int do_specialties (int cycles) } #endif - if (spcflags & SPCFLAG_COPPER) { - do_copper(); - } - #ifdef JIT if (spcflags & SPCFLAG_END_COMPILE) { unset_special(SPCFLAG_END_COMPILE); @@ -4717,9 +4703,6 @@ static int do_specialties (int cycles) while (spcflags & SPCFLAG_CPUINRESET) { x_do_cycles(4 * CYCLE_UNIT); spcflags = regs.spcflags; - if (spcflags & SPCFLAG_COPPER) { - do_copper(); - } if (!(spcflags & SPCFLAG_CPUINRESET) || (spcflags & SPCFLAG_BRK) || (spcflags & SPCFLAG_MODE_CHANGE)) { break; } @@ -4738,8 +4721,6 @@ static int do_specialties (int cycles) } x_do_cycles(c * CYCLE_UNIT); spcflags = regs.spcflags; - if (spcflags & SPCFLAG_COPPER) - do_copper(); #ifdef WITH_PPC if (ppc_state) { if (uae_ppc_poll_check_halt()) @@ -5066,7 +5047,7 @@ static void m68k_run_1_ce (void) r->instruction_pc = m68k_getpc (); #ifdef DEBUGGER if (debug_dma) { - record_dma_event_data(DMA_EVENT_CPUINS, current_hpos(), vpos, r->opcode); + record_dma_event_data(DMA_EVENT_CPUINS, r->opcode); } #endif @@ -5372,10 +5353,6 @@ static void run_cpu_thread(void (*f)(void *)) do_cycles((maxhpos / 2) * CYCLE_UNIT); - if (regs.spcflags & SPCFLAG_COPPER) { - do_copper(); - } - check_uae_int_request(); if (regs.spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { int intr = intlev(); @@ -5467,7 +5444,7 @@ void exec_nostats (void) cpu_cycles = 4 * CYCLE_UNIT; // adjust_cycles(cpu_cycles); if (!currprefs.cpu_thread) { - do_cycles (cpu_cycles); + do_cycles(cpu_cycles); #ifdef WITH_PPC if (ppc_state) @@ -5507,7 +5484,7 @@ void execute_normal(void) // cpu_cycles = adjust_cycles(cpu_cycles); if (!currprefs.cpu_thread) { - do_cycles (cpu_cycles); + do_cycles(cpu_cycles); } total_cycles += cpu_cycles; @@ -5722,7 +5699,7 @@ static void m68k_run_mmu060 (void) f.x = regflags.x; regs.instruction_pc = m68k_getpc (); - do_cycles (cpu_cycles); + do_cycles(cpu_cycles); mmu_opcode = -1; mmu060_state = 0; @@ -5777,7 +5754,7 @@ static void m68k_run_mmu040 (void) mmu_restart = true; regs.instruction_pc = m68k_getpc (); - do_cycles (cpu_cycles); + do_cycles(cpu_cycles); mmu_opcode = -1; mmu_opcode = regs.opcode = x_prefetch (0); @@ -5875,7 +5852,7 @@ insretry: if (!currprefs.cpu_cycle_exact) { count_instr (regs.opcode); - do_cycles (cpu_cycles); + do_cycles(cpu_cycles); cpu_cycles = (*cpufunctbl[regs.opcode])(regs.opcode); @@ -7147,10 +7124,10 @@ uae_u8 *restore_cpu (uae_u8 *src) regs.read_buffer = restore_u16(); regs.write_buffer = restore_u16(); if (v & 1) { - regs.ipl[0] = restore_u8(); - regs.ipl[1] = restore_u8(); - regs.ipl_pin = (uae_s32)restore_u8(); - regs.ipl_pin_p = (uae_s32)restore_u8(); + regs.ipl[0] = restore_s8(); + regs.ipl[1] = restore_s8(); + regs.ipl_pin = restore_s8(); + regs.ipl_pin_p = restore_s8(); regs.ipl_evt = restore_u64(); regs.ipl_evt_pre = restore_u64(); regs.ipl_pin_change_evt = restore_u64(); @@ -7596,10 +7573,10 @@ uae_u8 *save_cpu(size_t *len, uae_u8 *dstptr) save_u16(regs.ird); save_u16(regs.read_buffer); save_u16(regs.write_buffer); - save_u8(regs.ipl[0]); - save_u8(regs.ipl[1]); - save_u8(regs.ipl_pin); - save_u8(regs.ipl_pin_p); + save_s8(regs.ipl[0]); + save_s8(regs.ipl[1]); + save_s8(regs.ipl_pin); + save_s8(regs.ipl_pin_p); save_u64(regs.ipl_evt); save_u64(regs.ipl_evt_pre); save_u64(regs.ipl_pin_change_evt); @@ -7891,7 +7868,7 @@ bool cpureset (void) m68k_reset(); return true; } - if ((currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact) && currprefs.cpu_model <= 68020) { + if (currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact) { custom_reset_cpu(false, false); return false; } diff --git a/od-win32/avioutput.cpp b/od-win32/avioutput.cpp index b78f80ca..a1c335a3 100644 --- a/od-win32/avioutput.cpp +++ b/od-win32/avioutput.cpp @@ -134,7 +134,7 @@ static LPBITMAPINFOHEADER lpbi; static PCOMPVARS pcompvars; extern bool need_genlock_data; -extern uae_u8 **row_map_genlock; +extern uae_u16 **row_map_genlock; static bool usealpha(void) { diff --git a/od-win32/genlinetoscr_msvc/genlinetoscr_msvc.vcxproj b/od-win32/genlinetoscr_msvc/genlinetoscr_msvc.vcxproj index 9f1916f4..d1d82c51 100644 --- a/od-win32/genlinetoscr_msvc/genlinetoscr_msvc.vcxproj +++ b/od-win32/genlinetoscr_msvc/genlinetoscr_msvc.vcxproj @@ -116,8 +116,8 @@ MachineX86 - generating linetoscr.c - genlinetoscr.exe >..\..\linetoscr.cpp + generating linetoscr.cpp + genlinetoscr.exe del genlinetoscr.exe @@ -190,8 +190,8 @@ del genlinetoscr.exe MachineX86 - generating linetoscr.c - genlinetoscr.exe >..\..\linetoscr.cpp + generating linetoscr.cpp + genlinetoscr.exe del genlinetoscr.exe @@ -226,8 +226,10 @@ del genlinetoscr.exe MachineX86 - generating linetoscr.c - genlinetoscr.exe >..\..\linetoscr.c + generating linetoscr.cpp + genlinetoscr.exe +del genlinetoscr.exe + diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 0c21814d..44b68b80 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -810,8 +810,10 @@ #define IDC_ECS_DENISE 1522 #define IDC_ECS 1523 #define IDC_AGA 1524 -#define IDC_NTSC 1525 -#define IDC_NOSPEED 1527 +#define IDC_OCSA1000 1525 +#define IDC_OCSA1000NOEHB 1526 +#define IDC_NOSPEED 1526 +#define IDC_NTSC 1527 #define IDC_NOSOUND 1528 #define IDC_INACTIVE_NOSOUND 1528 #define IDC_MIDI 1529 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index c5de3929..3f8695e7 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -2,8 +2,8 @@ // #pragma code_page(65001) -#include "winres.h" #include "resource.h" +#include "winres.h" ///////////////////////////////////////////////////////////////////////////// // English (United Kingdom) resources @@ -749,57 +749,59 @@ IDD_CHIPSET DIALOGEX 0, 0, 396, 316 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "Chipset",IDC_STATIC,1,5,212,151 - CONTROL "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS, - "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,26,88,10 - CONTROL "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,42,88,10 + GROUPBOX "Chipset",IDC_STATIC,1,5,214,118 + CONTROL "OCS Agnus + OCS Denise [] Most A500s and A2000s. Slightly updated A1000 chipset.",IDC_OCS, + "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,38,88,10 + CONTROL "ECS Agnus + OCS Denise [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,54,88,10 CONTROL "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,58,88,10 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,112,54,88,10 CONTROL "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,114,26,86,10 - CONTROL "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,114,42,86,10 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,71,86,10 + CONTROL "OCS Agnus + ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE, + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,112,38,86,10 + CONTROL "A1000 [] Original A1000 chipset.",IDC_OCSA1000,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,112,23,88,10 + CONTROL "A1000 (No EHB) [] Original, early A1000 chipset. without EHB support.",IDC_OCSA1000NOEHB, + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,23,88,10 CONTROL "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,58,86,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,71,86,10 CONTROL "Cycle-exact (Full) [] The most compatible A500/A1200 emulation mode.",IDC_CYCLEEXACT, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,79,194,10 - CONTROL "Cycle-exact (DMA/Memory accesses)",IDC_CYCLEEXACTMEMORY, "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,92,194,10 - RTEXT "Chipset Extra:",IDC_STATIC,38,119,71,15,SS_CENTERIMAGE - COMBOBOX IDC_CS_EXT,116,120,88,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Options",IDC_STATIC,221,4,173,154 - CONTROL "Keyboard connected",IDC_KEYBOARD_CONNECTED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,17,150,10 - CONTROL "Subpixel display emulation",IDC_SUBPIXEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,31,150,10 + CONTROL "Cycle-exact (DMA/Memory accesses)",IDC_CYCLEEXACTMEMORY, + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,105,194,10 + RTEXT "Chipset Extra:",IDC_STATIC,226,65,61,15,SS_CENTERIMAGE + COMBOBOX IDC_CS_EXT,295,65,88,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Options",IDC_STATIC,221,4,173,175 + CONTROL "Subpixel display emulation",IDC_SUBPIXEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,16,150,10 CONTROL "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,45,150,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,28,150,10 CONTROL "Wait for Blitter [] Compatibility hack for programs that don't wait for the blitter correctly, causing graphics corruption if CPU is too fast.",IDC_BLITWAIT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,57,150,10 - LTEXT "Monitor sync source:",IDC_STATIC,242,75,101,9 - COMBOBOX IDC_CS_HVCSYNC,237,90,147,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Video port display hardware:",IDC_STATIC,241,105,117,15,SS_CENTERIMAGE - COMBOBOX IDC_MONITOREMU,237,123,147,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Monitor:",IDC_STATIC,240,139,68,15,SS_CENTERIMAGE,WS_EX_RIGHT - COMBOBOX IDC_MONITOREMU_MON,319,141,65,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Collision Level",IDC_STATIC,1,161,393,48 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,40,150,10 + LTEXT "Monitor sync source:",IDC_STATIC,242,96,101,9 + COMBOBOX IDC_CS_HVCSYNC,237,108,147,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Video port display hardware:",IDC_STATIC,241,123,117,15,SS_CENTERIMAGE + COMBOBOX IDC_MONITOREMU,237,141,147,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Monitor:",IDC_STATIC,240,157,68,15,SS_CENTERIMAGE,WS_EX_RIGHT + COMBOBOX IDC_MONITOREMU_MON,319,159,65,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Collision Level",IDC_STATIC,1,180,393,48 CONTROL "None [] Collision hardware emulation disabled.",IDC_COLLISION0, - "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,47,177,101,10 + "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,47,196,101,10 CONTROL "Sprites only [] Emulate only sprite vs. sprite collisions.",IDC_COLLISION1, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,47,192,101,10 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,47,211,101,10 CONTROL "Sprites and Sprites vs. Playfield [] Recommended collision emulation level.",IDC_COLLISION2, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,177,181,10 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,196,181,10 CONTROL "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,192,181,10 - GROUPBOX "Genlock",IDC_STATIC,0,215,393,85 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,211,181,10 + GROUPBOX "Genlock",IDC_STATIC,0,229,393,85 CONTROL "Genlock connected [] Allow boot sequence to detect genlock.",IDC_GENLOCK, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,231,109,10 - COMBOBOX IDC_GENLOCKMODE,129,229,192,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_GENLOCKMIX,330,229,54,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,245,109,10 + COMBOBOX IDC_GENLOCKMODE,129,243,192,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_GENLOCKMIX,330,243,54,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Include alpha channel in screenshots and video captures.",IDC_GENLOCK_ALPHA, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,247,214,10 - CONTROL "Keep aspect ratio",IDC_GENLOCK_KEEP_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,262,214,10 - COMBOBOX IDC_GENLOCKFILE,12,278,356,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "...",IDC_GENLOCKFILESELECT,375,277,10,15 + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,261,214,10 + CONTROL "Keep aspect ratio",IDC_GENLOCK_KEEP_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,276,214,10 + COMBOBOX IDC_GENLOCKFILE,12,292,356,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_GENLOCKFILESELECT,375,291,10,15 COMBOBOX IDC_KEYBOARDMODE,12,142,191,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Keyboard N-key rollover [] Always emulate n-key rollover (no key ghosting or jamming when pressing multiple keys at the same time) even if selected emulated keyboard model does not support it.",IDC_KEYBOARDNKRO, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,162,150,10 @@ -1435,8 +1437,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,3,1,0 - PRODUCTVERSION 5,3,1,0 + FILEVERSION 6,0,0,0 + PRODUCTVERSION 6,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1452,12 +1454,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "WinUAE" - VALUE "FileVersion", "5.3.1.0" + VALUE "FileVersion", "6.0.0.0" VALUE "InternalName", "WinUAE" VALUE "LegalCopyright", "© 1996-2024 under the GNU Public License (GPL)" VALUE "OriginalFilename", "WinUAE.exe" VALUE "ProductName", "WinUAE" - VALUE "ProductVersion", "5.3.1.0" + VALUE "ProductVersion", "6.0.0.0" END END BLOCK "VarFileInfo" diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index ca207ad7..cf0c682e 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -2274,7 +2274,7 @@ void rp_set_hwnd_delayed (void) if (currprefs.gf[idx].gfx_filter_autoscale == AUTOSCALE_RESIZE) { hwndset_delay += 10; } - if (log_rp) + if (log_rp && initialized) write_log (_T("RP_IPC_TO_HOST_SCREENMODE delay started (%d)\n"), hwndset_delay); screenmode_request = 0; diff --git a/od-win32/screenshot.cpp b/od-win32/screenshot.cpp index a72a1c22..111d3d93 100644 --- a/od-win32/screenshot.cpp +++ b/od-win32/screenshot.cpp @@ -31,7 +31,7 @@ int screenshot_clipmode = 0; int screenshot_multi = 0; extern bool need_genlock_data; -extern uae_u8 **row_map_genlock; +extern uae_u16 **row_map_genlock; static bool usealpha(void) { diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index c40fba20..8c9be627 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -6037,11 +6037,16 @@ void target_setdefaultstatefilename(const TCHAR *name) _tcscpy(savestate_fname, path); } -#if WINUAEPUBLICBETA > 0 +#if WINUAEPUBLICBETA == 1 static const TCHAR *BETAMESSAGE = { _T("This is unstable beta software. Click cancel if you are not comfortable using software that is incomplete and can have serious programming errors.") }; #endif +#if WINUAEPUBLICBETA == 2 +static const TCHAR *BETAMESSAGE = { + _T("This is unstable alpha software. Click cancel if you are not comfortable using software that is incomplete and can have serious programming errors.") +}; +#endif static int betamessage (void) { @@ -6573,6 +6578,7 @@ extern int fakemodewaitms; extern float sound_sync_multiplier; extern int log_cd32; extern int log_ld; +extern int kb_mcu_log; extern int logitech_lcd; extern uae_s64 max_avi_size; extern int floppy_writemode; @@ -6624,8 +6630,13 @@ static float getvalf (const TCHAR *s) static void makeverstr (TCHAR *s) { if (_tcslen (WINUAEBETA) > 0) { - _stprintf (BetaStr, _T(" (%sBeta %s, %d.%02d.%02d)"), WINUAEPUBLICBETA > 0 ? _T("Public ") : _T(""), WINUAEBETA, - GETBDY(WINUAEDATE), GETBDM(WINUAEDATE), GETBDD(WINUAEDATE)); + if (WINUAEPUBLICBETA == 2) { + _stprintf (BetaStr, _T(" (DevAlpha %s, %d.%02d.%02d)"), WINUAEBETA, + GETBDY(WINUAEDATE), GETBDM(WINUAEDATE), GETBDD(WINUAEDATE)); + } else { + _stprintf (BetaStr, _T(" (%sBeta %s, %d.%02d.%02d)"), WINUAEPUBLICBETA > 0 ? _T("Public ") : _T(""), WINUAEBETA, + GETBDY(WINUAEDATE), GETBDM(WINUAEDATE), GETBDD(WINUAEDATE)); + } #ifdef _WIN64 _tcscat (BetaStr, _T(" 64-bit")); #endif diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index f8f7333f..4ea692e7 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -1275,8 +1275,6 @@ bool render_screen(int monid, int mode, bool immediate) return mon->render_ok; } } -// flushymin = 0; -// flushymax = mon->currentmode.amiga_height; gfx_lock(); if (mon->currentmode.flags & DM_D3D) { v = D3D_renderframe(monid, mode, immediate); @@ -2491,11 +2489,11 @@ int check_prefs_changed_gfx(void) } } if (changed) { - init_hz_normal(); + init_hz(); } if (currprefs.chipset_refreshrate != changed_prefs.chipset_refreshrate) { currprefs.chipset_refreshrate = changed_prefs.chipset_refreshrate; - init_hz_normal(); + init_hz(); return 1; } diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index aa50718d..e2a22f8a 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -9227,21 +9227,27 @@ static void values_to_chipsetdlg (HWND hDlg) switch(workprefs.chipset_mask) { - case 0: - CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 0); + case CSMASK_A1000_NOEHB: + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000NOEHB, IDC_OCS + 6); + break; + case CSMASK_A1000: + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 5); + break; + case CSMASK_OCS: + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 0); break; case CSMASK_ECS_AGNUS: - CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 1); + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 1); break; case CSMASK_ECS_DENISE: - CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 2); + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 2); break; case CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE: - CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 3); + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 3); break; case CSMASK_AGA: case CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA: - CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 4); + CheckRadioButton(hDlg, IDC_OCS, IDC_OCSA1000, IDC_OCS + 4); break; } CheckDlgButton(hDlg, IDC_NTSC, workprefs.ntscmode); @@ -9334,14 +9340,17 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l } } - workprefs.collision_level = ischecked (hDlg, IDC_COLLISION0) ? 0 - : ischecked (hDlg, IDC_COLLISION1) ? 1 - : ischecked (hDlg, IDC_COLLISION2) ? 2 : 3; - workprefs.chipset_mask = ischecked (hDlg, IDC_OCS) ? 0 - : ischecked (hDlg, IDC_ECS_AGNUS) ? CSMASK_ECS_AGNUS - : ischecked (hDlg, IDC_ECS_DENISE) ? CSMASK_ECS_DENISE - : ischecked (hDlg, IDC_ECS) ? CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE + workprefs.collision_level = ischecked(hDlg, IDC_COLLISION0) ? 0 + : ischecked(hDlg, IDC_COLLISION1) ? 1 + : ischecked(hDlg, IDC_COLLISION2) ? 2 : 3; + workprefs.chipset_mask = ischecked(hDlg, IDC_OCS) ? CSMASK_OCS + : ischecked(hDlg, IDC_OCSA1000NOEHB) ? CSMASK_A1000_NOEHB + : ischecked(hDlg, IDC_OCSA1000) ? CSMASK_A1000 + : ischecked(hDlg, IDC_ECS_AGNUS) ? CSMASK_ECS_AGNUS + : ischecked(hDlg, IDC_ECS_DENISE) ? CSMASK_ECS_DENISE + : ischecked(hDlg, IDC_ECS) ? CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE : CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; + n1 = ischecked (hDlg, IDC_NTSC); if (workprefs.ntscmode != n1) { workprefs.ntscmode = n1; diff --git a/od-win32/writelog.cpp b/od-win32/writelog.cpp index 415eaa9f..19b423e9 100644 --- a/od-win32/writelog.cpp +++ b/od-win32/writelog.cpp @@ -67,7 +67,7 @@ FILE *debugfile = NULL; int console_logging = 0; static int debugger_type = -1; extern BOOL debuggerinitializing; -extern int lof_store; +extern bool lof_store; static int console_input_linemode = -1; int always_flush_log = 0; TCHAR *conlogfile = NULL; @@ -545,7 +545,7 @@ TCHAR *write_log_get_ts(void) _stprintf (p, _T("%03d"), tb.millitm); p += _tcslen (p); if (vsync_counter != 0xffffffff) - _stprintf (p, _T(" [%d %03d%s%03d]"), vsync_counter, current_hpos_safe (), lof_store ? _T("-") : _T("="), vpos); + _stprintf (p, _T(" [%d %03d%s%03d/%03d]"), vsync_counter, current_hpos_safe(), lof_store ? _T("-") : _T("="), vpos, linear_vpos); _tcscat (p, _T(": ")); return out; } diff --git a/savestate.cpp b/savestate.cpp index f0f6574d..abfe4a91 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -703,8 +703,10 @@ void restore_state (const TCHAR *filename) end = restore_custom_sprite (5, chunk); else if (!_tcscmp (name, _T("SPR6"))) end = restore_custom_sprite (6, chunk); - else if (!_tcscmp (name, _T("SPR7"))) - end = restore_custom_sprite (7, chunk); + else if (!_tcscmp(name, _T("SPR7"))) + end = restore_custom_sprite(7, chunk); + else if (!_tcscmp(name, _T("BPLX"))) + end = restore_custom_bpl(chunk); else if (!_tcscmp (name, _T("CIAA"))) end = restore_cia (0, chunk); else if (!_tcscmp (name, _T("CIAB"))) @@ -899,7 +901,7 @@ bool savestate_restore_finish(void) restore_debug_memwatch_finish(); #endif savestate_state = 0; - init_hz_normal(); + init_hz(); audio_activate(); return true; } @@ -1062,6 +1064,11 @@ static int save_state_internal (struct zfile *f, const TCHAR *description, int c xfree(dst); } + dst = save_custom_bpl(&len, NULL); + if (dst) { + save_chunk(f, dst, len, _T("BPLX"), 0); + xfree(dst); + } _tcscpy (name, _T("SPRx")); for (i = 0; i < 8; i++) { dst = save_custom_sprite (i, &len, 0); diff --git a/specialmonitors.cpp b/specialmonitors.cpp index 0cf6f373..2becd882 100755 --- a/specialmonitors.cpp +++ b/specialmonitors.cpp @@ -73,64 +73,44 @@ static bool automatic; static int monitor; extern uae_u16 bplcon0; -extern uae_u8 **row_map_genlock; +extern uae_u16 **row_map_genlock; +static int spm_left_border; static uae_u8 graffiti_palette[256 * 4]; -STATIC_INLINE bool is_transparent(uae_u8 v) +STATIC_INLINE bool is_transparent(uae_u16 v) { return v == 0; } STATIC_INLINE uae_u8 FVR(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return dataline[2]; - else - return ((((uae_u16*)dataline)[0] >> 11) & 31) << 3; + return dataline[2]; } STATIC_INLINE uae_u8 FVG(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return dataline[1]; - else - return ((((uae_u16*)dataline)[0] >> 5) & 63) << 2; + return dataline[1]; } STATIC_INLINE uae_u8 FVB(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return dataline[0]; - else - return ((((uae_u16*)dataline)[0] >> 0) & 31) << 2; + return dataline[0]; } STATIC_INLINE bool FR(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return (dataline[2] & 0x80) != 0; - else - return ((dataline[1] >> 7) & 1) != 0; + return (dataline[2] & 0x80) != 0; } STATIC_INLINE bool FG(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return (dataline[1] & 0x80) != 0; - else - return ((dataline[1] >> 2) & 1) != 0; + return (dataline[1] & 0x80) != 0; } STATIC_INLINE bool FB(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return (dataline[0] & 0x80) != 0; - else - return ((dataline[0] >> 4) & 1) != 0; + return (dataline[0] & 0x80) != 0; } STATIC_INLINE bool FI(struct vidbuffer *src, uae_u8 *dataline) { - if (src->pixbytes == 4) - return (dataline[0] & 0x10) != 0; - else - return ((dataline[0] >> 1) & 1) != 0; + return (dataline[0] & 0x10) != 0; } STATIC_INLINE uae_u8 FIRGB(struct vidbuffer *src, uae_u8 *dataline) @@ -174,52 +154,38 @@ STATIC_INLINE uae_u8 DCTV_FIRBG(struct vidbuffer *src, uae_u8 *dataline) STATIC_INLINE void PRGB(struct vidbuffer *dst, uae_u8 *dataline, uae_u8 r, uae_u8 g, uae_u8 b) { - if (dst->pixbytes == 4) { - dataline[0] = b; - dataline[1] = g; - dataline[2] = r; - } else { - r >>= 3; - g >>= 2; - b >>= 3; - ((uae_u16*)dataline)[0] = (r << 11) | (g << 5) | b; - } + dataline[0] = b; + dataline[1] = g; + dataline[2] = r; } STATIC_INLINE void PRGBA(struct vidbuffer *dst, uae_u8 *dataline, uae_u8 r, uae_u8 g, uae_u8 b, uae_u8 a) { - if (dst->pixbytes == 4) { - dataline[0] = b; - dataline[1] = g; - dataline[2] = r; - dataline[3] = a; - } else { - r >>= 3; - g >>= 2; - b >>= 3; - ((uae_u16*)dataline)[0] = (r << 11) | (g << 5) | b; - } + dataline[0] = b; + dataline[1] = g; + dataline[2] = r; + dataline[3] = a; } STATIC_INLINE void PUT_PRGB(uae_u8 *d, uae_u8 *d2, struct vidbuffer *dst, uae_u8 r, uae_u8 g, uae_u8 b, int xadd, int doublelines, bool hdouble) { if (hdouble) - PRGB(dst, d - dst->pixbytes, r, g, b); + PRGB(dst, d - 4, r, g, b); PRGB(dst, d, r, g, b); if (xadd >= 2) { - PRGB(dst, d + 1 * dst->pixbytes, r, g, b); + PRGB(dst, d + 1 * 4, r, g, b); if (hdouble) - PRGB(dst, d + 2 * dst->pixbytes, r, g, b); + PRGB(dst, d + 2 * 4, r, g, b); } if (doublelines) { if (hdouble) - PRGB(dst, d2 - dst->pixbytes, r, g, b); + PRGB(dst, d2 - 4, r, g, b); PRGB(dst, d2, r, g, b); if (xadd >= 2) { - PRGB(dst, d2 + 1 * dst->pixbytes, r, g, b); + PRGB(dst, d2 + 1 * 4, r, g, b); if (hdouble) - PRGB(dst, d2 + 2 * dst->pixbytes, r, g, b); + PRGB(dst, d2 + 2 * 4, r, g, b); } } } @@ -227,70 +193,46 @@ STATIC_INLINE void PUT_PRGB(uae_u8 *d, uae_u8 *d2, struct vidbuffer *dst, uae_u8 STATIC_INLINE void PUT_PRGBA(uae_u8 *d, uae_u8 *d2, struct vidbuffer *dst, uae_u8 r, uae_u8 g, uae_u8 b, uae_u8 a, int xadd, int doublelines, bool hdouble) { if (hdouble) - PRGBA(dst, d - dst->pixbytes, r, g, b, a); + PRGBA(dst, d - 4, r, g, b, a); PRGBA(dst, d, r, g, b, a); if (xadd >= 2) { - PRGBA(dst, d + 1 * dst->pixbytes, r, g, b, a); + PRGBA(dst, d + 1 * 4, r, g, b, a); if (hdouble) - PRGBA(dst, d + 2 * dst->pixbytes, r, g, b, a); + PRGBA(dst, d + 2 * 4, r, g, b, a); } if (doublelines) { if (hdouble) - PRGBA(dst, d2 - dst->pixbytes, r, g, b, a); + PRGBA(dst, d2 - 4, r, g, b, a); PRGBA(dst, d2, r, g, b, a); if (xadd >= 2) { - PRGBA(dst, d2 + 1 * dst->pixbytes, r, g, b, a); + PRGBA(dst, d2 + 1 * 4, r, g, b, a); if (hdouble) - PRGBA(dst, d2 + 2 * dst->pixbytes, r, g, b, a); + PRGBA(dst, d2 + 2 * 4, r, g, b, a); } } } STATIC_INLINE void PUT_AMIGARGB(uae_u8 *d, uae_u8 *s, uae_u8 *d2, uae_u8 *s2, struct vidbuffer *dst, int xadd, int doublelines, bool hdouble) { - if (dst->pixbytes == 4) { - if (hdouble) - ((uae_u32*)d)[-1] = ((uae_u32*)s)[-1]; - ((uae_u32*)d)[0] = ((uae_u32*)s)[0]; - } else { - if (hdouble) - ((uae_u16*)d)[-1] = ((uae_u16*)s)[-1]; - ((uae_u16*)d)[0] = ((uae_u16*)s)[0]; - } + if (hdouble) + ((uae_u32*)d)[-1] = ((uae_u32*)s)[-1]; + ((uae_u32*)d)[0] = ((uae_u32*)s)[0]; if (doublelines) { - if (dst->pixbytes == 4) { - if (hdouble) - ((uae_u32*)d2)[-1] = ((uae_u32*)s2)[-1]; - ((uae_u32*)d2)[0] = ((uae_u32*)s2)[0]; - } else { - if (hdouble) - ((uae_u16*)d2)[-1] = ((uae_u16*)s2)[-1]; - ((uae_u16*)d2)[0] = ((uae_u16*)s2)[0]; - } + if (hdouble) + ((uae_u32*)d2)[-1] = ((uae_u32*)s2)[-1]; + ((uae_u32*)d2)[0] = ((uae_u32*)s2)[0]; } } STATIC_INLINE void PUT_AMIGARGBA(uae_u8 *d, uae_u8 *s, uae_u8 *d2, uae_u8 *s2, struct vidbuffer *dst, int xadd, int doublelines, bool hdouble) { - if (dst->pixbytes == 4) { - if (hdouble) - ((uae_u32*)d)[-1] = (((uae_u32*)s)[-1]) | 0xff000000; - ((uae_u32*)d)[0] = (((uae_u32*)s)[0]) | 0xff000000; - } else { - if (hdouble) - ((uae_u16*)d)[-1] = (((uae_u16*)s)[-1]) | 0xff000000; - ((uae_u16*)d)[0] = (((uae_u16*)s)[0]) | 0xff000000; - } + if (hdouble) + ((uae_u32*)d)[-1] = (((uae_u32*)s)[-1]) | 0xff000000; + ((uae_u32*)d)[0] = (((uae_u32*)s)[0]) | 0xff000000; if (doublelines) { - if (dst->pixbytes == 4) { - if (hdouble) - ((uae_u32*)d2)[-1] = (((uae_u32*)s2)[-1]) | 0xff000000; - ((uae_u32*)d2)[0] = (((uae_u32*)s2)[0]) | 0xff000000; - } else { - if (hdouble) - ((uae_u16*)d2)[-1] = (((uae_u16*)s2)[-1]) | 0xff000000; - ((uae_u16*)d2)[0] = (((uae_u16*)s2)[0]) | 0xff000000; - } + if (hdouble) + ((uae_u32*)d2)[-1] = (((uae_u32*)s2)[-1]) | 0xff000000; + ((uae_u32*)d2)[0] = (((uae_u32*)s2)[0]) | 0xff000000; } } @@ -840,14 +782,14 @@ static bool firecracker24(struct vidbuffer *src, struct vidbuffer *dst, bool dou if (yoff >= src->inheight) continue; uae_u8 *line = src->bufmem + yoff * src->rowbytes; - uae_u8 *line_genlock = row_map_genlock[yoff]; + uae_u16 *line_genlock = row_map_genlock[yoff]; uae_u8 *dstline = dst->bufmem + (((y * 2 + oddlines) - dst->yoffset) / vdbl) * dst->rowbytes; uae_u8 *vramline = sm_frame_buffer + (fc24_y + oddlines) * SM_VRAM_WIDTH * SM_VRAM_BYTES + bufferoffset; fc24_x = 0; for (x = 0; x < src->inwidth; x++) { uae_u8 r = 0, g = 0, b = 0; uae_u8 *s = line + ((x << 1) / hdbl) * src->pixbytes; - uae_u8 *s_genlock = line_genlock + ((x << 1) / hdbl); + uae_u16 *s_genlock = line_genlock + ((x << 1) / hdbl); uae_u8 *d = dstline + ((x << 1) / hdbl) * dst->pixbytes; int fc24_xx = (fc24_x >> fc24_dx) - fc24_xoffset; uae_u8 *vramptr = NULL; @@ -1714,7 +1656,7 @@ static bool ham_e(struct vidbuffer *src, struct vidbuffer *dst, bool doublelines if (yoff >= src->inheight) continue; uae_u8 *line = src->bufmem + yoff * src->rowbytes; - uae_u8 *line_genlock = row_map_genlock[yoff]; + uae_u16 *line_genlock = row_map_genlock[yoff]; uae_u8 *dstline = dst->bufmem + (((y * 2 + oddlines) - dst->yoffset) / vdbl) * dst->rowbytes; bool getpalette = false; @@ -1723,7 +1665,7 @@ static bool ham_e(struct vidbuffer *src, struct vidbuffer *dst, bool doublelines int oddeven = 0; for (x = 0; x < src->inwidth; x++) { uae_u8 *s = line + ((x << 1) / hdbl) * src->pixbytes; - uae_u8 *s_genlock = line_genlock + ((x << 1) / hdbl); + uae_u16 *s_genlock = line_genlock + ((x << 1) / hdbl); uae_u8 *d = dstline + ((x << 1) / hdbl) * dst->pixbytes; uae_u8 *s2 = s + src->rowbytes; uae_u8 *d2 = d + dst->rowbytes; @@ -2080,14 +2022,15 @@ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) int total_width, total_height; dbl = avidinfo->ychange == 1 ? 2 : 1; - doff = (128 * 2 / avidinfo->xchange) * src->pixbytes; + int dxoff = 64; + doff = ((dxoff << RES_MAX) / avidinfo->xchange) * src->pixbytes; found = false; for (idline = 21; idline <= 29; idline += 8) { if (src->yoffset > (idline << VRES_MAX)) continue; - // min 178 max 234 - dataline = src->bufmem + (((idline << VRES_MAX) - src->yoffset) / avidinfo->ychange) * src->rowbytes + (((200 << RES_MAX) - src->xoffset) / avidinfo->xchange) * src->pixbytes; + int x = 160 + dxoff / 2 - src->xoffset - spm_left_border * 2; + dataline = src->bufmem + (((idline << VRES_MAX) - src->yoffset) / avidinfo->ychange) * src->rowbytes + ((x << RES_MAX) / avidinfo->xchange) * src->pixbytes; #if 0 write_log (_T("%02x%02x%02x %02x%02x%02x %02x%02x%02x %02x%02x%02x\n"), @@ -2096,6 +2039,16 @@ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) dataline[2 * doff + 0], dataline[2 * doff + 1], dataline[2 * doff + 2], dataline[3 * doff + 0], dataline[3 * doff + 1], dataline[3 * doff + 2]); #endif +#if 0 + uae_u8 *p = dataline; + for(int i = 0; i < 6; i++) { + *((uae_u32*)&p[0 * doff + 4]) = 0xff00ff; + *((uae_u32*)&p[1 * doff + 4]) = 0xff00ff; + *((uae_u32*)&p[2 * doff + 4]) = 0xff00ff; + *((uae_u32*)&p[3 * doff + 4]) = 0xff00ff; + p += src->rowbytes; + } +#endif if (FB(src, &dataline[0 * doff])) // 0:B = 0 continue; @@ -2139,7 +2092,7 @@ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) panel_width_draw = px == 2 ? 352 : 336; pxcnt = 3; hires = false; - srcxoffset = 113; + srcxoffset = 85 - spm_left_border * 2;; if (px > 2) return false; total_width = 336 + 336 + 352; @@ -2148,7 +2101,7 @@ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) panel_width_draw = 512; pxcnt = 2; hires = true; - srcxoffset = 129; + srcxoffset = 101 - spm_left_border * 2; if (px > 1) return false; total_width = 512 + 512; @@ -2249,7 +2202,7 @@ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) if (monitor != MONITOREMU_A2024) { monitor = MONITOREMU_A2024; - write_log (_T("A2024 %dHz %s mode\n"), hires ? 10 : 15, ntsc ? _T("NTSC") : _T("PAL")); + write_log (_T("A2024 %dHz %s mode\n"), hires ? 15 : 10, ntsc ? _T("NTSC") : _T("PAL")); } return true; @@ -2600,21 +2553,17 @@ skip: int gen_xoffset = 0; int gen_yoffset = 0; - if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME) { - gen_xoffset = (xstart / 2) - hsync_end_left_border * 2; + gen_xoffset = 0; + if (currprefs.gfx_overscanmode == OVERSCANMODE_EXTREME) { + gen_xoffset += 16 * 2; + } else if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) { + gen_xoffset += 36 * 2; } - gen_yoffset = (ystart - minfirstline) * 2; + gen_yoffset = (ystart - minfirstline) * 2 / 2; gen_xoffset += currprefs.genlock_offset_x; gen_yoffset += currprefs.genlock_offset_y; - int vblank_top_start, vblank_bottom_stop; - int hblank_left_start, hblank_right_stop; - - get_screen_blanking_limits(&hblank_left_start, &hblank_right_stop, &vblank_bottom_stop, &vblank_top_start); - vblank_bottom_stop <<= vdbl; - vblank_top_start <<= vdbl; - bool first = true; uae_u8 *firstdstline = NULL; @@ -2625,14 +2574,11 @@ skip: continue; if (yoff >= src->inheight) continue; - if (y * 2 < vblank_top_start || y * 2 >= vblank_bottom_stop) - continue; bool ztoggle = false; uae_u8 *line = src->bufmem + yoff * src->rowbytes; - uae_u8 *lineprev = yoff > 0 ? src->bufmem + (yoff - 1) * src->rowbytes : NULL; uae_u8 *dstline = dst->bufmem + (((y * 2 + oddlines) - dst->yoffset) >> vdbl) * dst->rowbytes; - uae_u8 *line_genlock = row_map_genlock[yoff]; + uae_u16 *line_genlock = row_map_genlock[yoff]; int gy = (((y * 2 + oddlines) - src->yoffset + offsety - gen_yoffset) >> vdbl) * deltay / 65536; if (genlock_image_upsidedown) gy = (genlock_image_height - 1) - gy; @@ -2642,7 +2588,7 @@ skip: noise_add = (quickrand() & 15) | 1; uae_u8 *s = line; uae_u8 *d = dstline; - uae_u8 *s_genlock = line_genlock; + uae_u16 *s_genlock = line_genlock; if (first) { firstdstline = dstline; first = false; @@ -2651,37 +2597,35 @@ skip: for (x = 0; x < src->inwidth; x++) { uae_u8 *s2 = s + src->rowbytes; uae_u8 *d2 = d + dst->rowbytes; - if (x >= hblank_left_start && x < hblank_right_stop) { - if ((!zclken && is_transparent(*s_genlock)) || (zclken && ztoggle)) { - a = amix2; - if (genlock_error) { - r = 0x00; - g = 0x00; - b = 0xdd; - } else if (genlock_blank) { - r = g = b = 0; - } else if (genlock_image) { - int gx = (x + offsetx - gen_xoffset) * deltax / 65536; - if (gx >= 0 && gx < genlock_image_width && gy >= 0 && gy < genlock_image_height) { - uae_u8 *s_genlock_image = image_genlock + gx * genlock_image_pixbytes; - r = s_genlock_image[genlock_image_red_index]; - g = s_genlock_image[genlock_image_green_index]; - b = s_genlock_image[genlock_image_blue_index]; - } else { - r = g = b = 0; - } + if ((!zclken && is_transparent(*s_genlock)) || (zclken && ztoggle)) { + a = amix2; + if (genlock_error) { + r = 0x00; + g = 0x00; + b = 0xdd; + } else if (genlock_blank) { + r = g = b = 0; + } else if (genlock_image) { + int gx = (x + offsetx - gen_xoffset) * deltax / 65536; + if (gx >= 0 && gx < genlock_image_width && gy >= 0 && gy < genlock_image_height) { + uae_u8 *s_genlock_image = image_genlock + gx * genlock_image_pixbytes; + r = s_genlock_image[genlock_image_red_index]; + g = s_genlock_image[genlock_image_green_index]; + b = s_genlock_image[genlock_image_blue_index]; } else { - r = g = b = get_noise(); - } - if (mix2) { - r = (mix1 * r + mix2 * FVR(src, s)) / 256; - g = (mix1 * g + mix2 * FVG(src, s)) / 256; - b = (mix1 * b + mix2 * FVB(src, s)) / 256; + r = g = b = 0; } - PUT_PRGBA(d, d2, dst, r, g, b, a, 0, doublelines, false); } else { - PUT_AMIGARGBA(d, s, d2, s2, dst, 0, doublelines, false); + r = g = b = get_noise(); + } + if (mix2) { + r = (mix1 * r + mix2 * FVR(src, s)) / 256; + g = (mix1 * g + mix2 * FVG(src, s)) / 256; + b = (mix1 * b + mix2 * FVB(src, s)) / 256; } + PUT_PRGBA(d, d2, dst, r, g, b, a, 0, doublelines, false); + } else { + PUT_AMIGARGBA(d, s, d2, s2, dst, 0, doublelines, false); } s += src->pixbytes; d += dst->pixbytes; @@ -2696,7 +2640,7 @@ skip: } if (firstdstline) { - firstdstline += hblank_left_start * dst->pixbytes; + firstdstline += xstart * dst->pixbytes; genlock_infotext(firstdstline, dst); } @@ -2915,7 +2859,7 @@ struct opals { static struct opals *opal; -static void opal_pixel(struct opals *opal, uae_u8 *d, uae_u8 *d2, uae_u8 *s, uae_u8 *s2, uae_u8 *s_genlock, struct vidbuffer *src, struct vidbuffer *dst, uae_u8 r, uae_u8 g, uae_u8 b, uae_u8 pr, bool doublelines, bool hires, bool nextpix) +static void opal_pixel(struct opals *opal, uae_u8 *d, uae_u8 *d2, uae_u8 *s, uae_u8 *s2, uae_u16 *s_genlock, struct vidbuffer *src, struct vidbuffer *dst, uae_u8 r, uae_u8 g, uae_u8 b, uae_u8 pr, bool doublelines, bool hires, bool nextpix) { bool oa; switch (opal->priority_stencil_mode | pr) @@ -3040,7 +2984,7 @@ static bool opalvision(struct vidbuffer *src, struct vidbuffer *dst, bool double for (; y < yend; y++) { uae_u8 *line = NULL; - uae_u8 *line_genlock = NULL; + uae_u16 *line_genlock = NULL; uae_u8 *dstline = NULL; int ydisp = -1; @@ -3119,7 +3063,7 @@ static bool opalvision(struct vidbuffer *src, struct vidbuffer *dst, bool double bool command_update = false; bool hstart = false; - int ax = 7; + int ax = 8; for (x = 0; x < src->inwidth; x++, ax++) { uae_u8 *sa = line + ((x << 1) >> hdbl_shift) * src->pixbytes; uae_u8 newval = FIRGB(src, sa); @@ -3130,7 +3074,7 @@ static bool opalvision(struct vidbuffer *src, struct vidbuffer *dst, bool double uae_u8 *s = line + ((ax << 1) >> hdbl_shift) * src->pixbytes; uae_u8 *s2 = s + src->rowbytes; - uae_u8 *s_genlock = line_genlock ? line_genlock + ((ax << 1) >> hdbl_shift) : NULL; + uae_u16 *s_genlock = line_genlock ? line_genlock + ((ax << 1) >> hdbl_shift) : NULL; if (!oddeven) { @@ -3672,20 +3616,23 @@ static bool emulate_specialmonitors2(struct vidbuffer *src, struct vidbuffer *ds bool emulate_specialmonitors(struct vidbuffer *src, struct vidbuffer *dst) { + // compatibility fix for new chipset emulation + uae_u8 *bf = src->bufmem; + src->bufmem -= src->rowbytes; + spm_left_border = hdisplay_left_border - 15; + + bool ret = true; if (!emulate_specialmonitors2(src, dst, -1)) { if (monitor) { clearmonitor(dst); monitor = 0; write_log(_T("Native mode\n")); } - return false; + ret = false; } - return true; -} -bool emulate_specialmonitors_line(struct vidbuffer *src, struct vidbuffer *dst, int line) -{ - return emulate_specialmonitors2(src, dst, line); + src->bufmem = bf; + return ret; } void specialmonitor_reset(void) -- 2.47.3