]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Drawing updates (NTSC fast mode glitch fix, fast RGA pipeline fix, lol state when...
authorToni Wilen <twilen@winuae.net>
Fri, 25 Apr 2025 15:56:10 +0000 (18:56 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 25 Apr 2025 15:56:10 +0000 (18:56 +0300)
13 files changed:
custom.cpp
drawing.cpp
genlinetoscr.cpp
include/drawing.h
linetoscr_aga_fm0_genlock.cpp
linetoscr_aga_fm1_genlock.cpp
linetoscr_aga_fm2_genlock.cpp
linetoscr_ecs_fast.cpp
linetoscr_ecs_genlock_fast.cpp
linetoscr_ecs_shres.cpp
linetoscr_ocs_ecs_genlock.cpp
linetoscr_ocs_ecs_ntsc_genlock.cpp
newcpu.cpp

index 92600b15a014a098d97841f0ce0fb9e53d688c09..ebbd3669c1a9e913e555a6c5b3c3335895951241 100644 (file)
@@ -120,7 +120,8 @@ static int rga_denise_cycle, rga_denise_cycle_start, 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, strobe_fast;
+static uae_u16 prev_strobe;
+static bool vb_fast, vb_fast_prev;
 static uae_u32 custom_state_flags;
 static int not_safe_mode;
 static bool dmal_next;
@@ -561,6 +562,7 @@ static bool agnus_equdis;
 int maxhpos = MAXHPOS_PAL;
 static int maxhpos_long;
 int maxhpos_short = MAXHPOS_PAL;
+static bool maxhpos_lol;
 int maxvpos = MAXVPOS_PAL;
 int maxvpos_nom = MAXVPOS_PAL; // nominal value (same as maxvpos but "faked" maxvpos in fake 60hz modes)
 static int maxvpos_long;
@@ -1136,28 +1138,28 @@ static void set_chipset_mode(bool imm)
                }
        }
        if (imm || bplcon0 != bplcon0_saved) {
-               denise_update_reg(0x100, bplcon0);
+               denise_update_reg_queue(0x100, bplcon0, rga_denise_cycle_line);
        }
        if (imm || bplcon1 != bplcon1_saved) {
-               denise_update_reg(0x102, bplcon1);
+               denise_update_reg_queue(0x102, bplcon1, rga_denise_cycle_line);
        }
        if (imm || bplcon2 != bplcon2_saved) {
-               denise_update_reg(0x104, bplcon2);
+               denise_update_reg_queue(0x104, bplcon2, rga_denise_cycle_line);
        }
        if (imm || bplcon3 != bplcon3_saved) {
-               denise_update_reg(0x106, bplcon3);
+               denise_update_reg_queue(0x106, bplcon3, rga_denise_cycle_line);
        }
        if (imm || bplcon4 != bplcon4_saved) {
-               denise_update_reg(0x10c, bplcon4);
+               denise_update_reg_queue(0x10c, bplcon4, rga_denise_cycle_line);
        }
        if (imm) {
-               denise_update_reg(0x8e, diwstrt);
+               denise_update_reg_queue(0x8e, diwstrt, rga_denise_cycle_line);
                if (diwhigh_written) {
-                       denise_update_reg(0x1e4, diwhigh);
+                       denise_update_reg_queue(0x1e4, diwhigh, rga_denise_cycle_line);
                }
        }
        if (imm || fmode != fmode_saved) {
-               denise_update_reg(0x1fc, fmode);
+               denise_update_reg_queue(0x1fc, fmode, rga_denise_cycle_line);
                setup_fmodes(bplcon0);
        }
 }
@@ -1630,9 +1632,9 @@ void compute_framesync(void)
        }
 
        if (currprefs.gfx_overscanmode >= OVERSCANMODE_ULTRA) {
-               vb->inwidth = current_linear_hpos << (res2 + 1);
+               vb->inwidth = current_linear_hpos_short << (res2 + 1);
        } else {
-               vb->inwidth = (current_linear_hpos - (display_hstart_cyclewait_skip + display_hstart_cyclewait_skip2)) << (res2 + 1);
+               vb->inwidth = (current_linear_hpos_short - (display_hstart_cyclewait_skip + display_hstart_cyclewait_skip2)) << (res2 + 1);
        }
        vb->inwidth2 = vb->inwidth;
        vb->extrawidth = -2;
@@ -1646,8 +1648,11 @@ void compute_framesync(void)
        if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME) {
                vb->extrawidth = -1;
        }
-       int mfl = minfirstline + 1;
-       int maxv = current_linear_vpos - (mfl > vsync_startline ? mfl - vsync_startline : 0);
+       int mfl = minfirstline_linear;
+       if (currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA) {
+               mfl += 2;
+       }
+       int maxv = current_linear_vpos - mfl;
        vb->inheight = maxv << vres2;
        vb->inheight2 = vb->inheight;
        vb->inxoffset = 0;
@@ -2362,6 +2367,7 @@ static int GETHPOS(void)
 static void setmaxhpos(void)
 {
        maxhpos = maxhpos_short + lol;
+       maxhpos_lol = lol;
        maxhpos_long = linetoggle ? maxhpos_short + 1 : -1;
        maxhposm0 = maxhpos;
        maxhposm1 = maxhpos - 1;
@@ -5037,7 +5043,7 @@ static void vsync_check_vsyncmode(void)
                                current_linear_vpos != current_linear_vpos_temp) {
                                current_linear_hpos = current_linear_hpos_temp;
                                current_linear_vpos = current_linear_vpos_temp;
-                               current_linear_hpos_short = current_linear_hpos - lol;
+                               current_linear_hpos_short = current_linear_hpos - maxhpos_lol;
                                current_linear_vpos_nom = current_linear_vpos - lof_store;
                                init_beamcon0();
                                compute_framesync();
@@ -6645,6 +6651,7 @@ void custom_reset(bool hardreset, bool keyboardreset)
                maxvpos = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
                maxvpos_nom = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
                maxvpos_display = ntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
+               maxhpos_lol = false;
        }
 
        if (!savestate_state) {
@@ -6758,6 +6765,7 @@ void custom_reset(bool hardreset, bool keyboardreset)
 
                maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL;
                maxhpos_short = maxhpos;
+               maxhpos_lol = lol;
                updateextblk();
 
                bplcon0_saved = bplcon0;
@@ -7551,7 +7559,7 @@ static int REGPARAM2 custom_wput_1(uaecptr addr, uae_u32 value, int noget)
                        // fast CPU RGA pipeline, allow multiple register writes per CCK
                        if (!denise_update_reg_queued(addr, v, rga_denise_cycle_line)) {
                                // if full: direct write
-                               denise_update_reg(addr, value);
+                               denise_update_reg_queue(addr, value, rga_denise_cycle_line);
                        }
                } else {
                        write_drga(addr, NULL, v);
@@ -7824,22 +7832,23 @@ uae_u8 *restore_custom(uae_u8 *src)
 
        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(0x1e4, diwhigh);
-       denise_update_reg(0x08e, diwstrt);
-       denise_update_reg(0x090, diwstop);
+       denise_update_reg_queue(0x100, bplcon0, rga_denise_cycle_line);
+       denise_update_reg_queue(0x102, bplcon1, rga_denise_cycle_line);
+       denise_update_reg_queue(0x104, bplcon2, rga_denise_cycle_line);
+       denise_update_reg_queue(0x106, bplcon3, rga_denise_cycle_line);
+       denise_update_reg_queue(0x10c, bplcon4, rga_denise_cycle_line);
+       denise_update_reg_queue(0x1e4, diwhigh, rga_denise_cycle_line);
+       denise_update_reg_queue(0x08e, diwstrt, rga_denise_cycle_line);
+       denise_update_reg_queue(0x090, diwstop, rga_denise_cycle_line);
        if (diwhigh_written) {
-               denise_update_reg(0x1e4, diwhigh);
+               denise_update_reg_queue(0x1e4, diwhigh, rga_denise_cycle_line);
        }
-       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);
+       denise_update_reg_queue(0x1fc, fmode, rga_denise_cycle_line);
+       denise_update_reg_queue(0x098, clxcon, rga_denise_cycle_line);
+       denise_update_reg_queue(0x10e, clxcon2, rga_denise_cycle_line);
+       denise_update_reg_queue(0x1c4, hbstrt, rga_denise_cycle_line);
+       denise_update_reg_queue(0x1c6, hbstop, rga_denise_cycle_line);
+       draw_denise_line_queue_flush();
        docols(&denise_colors);
        docols(&agnus_colors);
 
@@ -10462,7 +10471,7 @@ static int getlinetype(void)
 {
        int type = 0;
        
-       if (strobe_fast != 0x3c) {
+       if (vb_fast) {
                type = LINETYPE_BLANK;
        } else if (vdiwstate == diw_states::DIW_waiting_start || GET_PLANES(bplcon0) == 0 || !dmaen(DMA_BITPLANE)) {
                type = LINETYPE_BORDER;
@@ -10699,11 +10708,11 @@ static bool checkprevfieldlinestateequal(void)
 
        int type = getlinetype();
        if (type && type == l->type && displayresetcnt == l->cnt) {
-               if (type == LINETYPE_BLANK && strobe_fast != 0x3c) {
+               if (type == LINETYPE_BLANK && vb_fast) {
                        if (1) {
                                ret = true;
                        }
-               } else if (type == LINETYPE_BORDER && strobe_fast == 0x3c && !l->blankedline) {
+               } else if (type == LINETYPE_BORDER && !vb_fast && !l->blankedline) {
                        if (1) {
                                uae_u32 c = ((bplcon0 & 1) && (bplcon3 & 0x20)) ? 0 : (aga_mode ? agnus_colors.color_regs_aga[0] : agnus_colors.color_regs_ecs[0]);
                                if (!always && c == l->color0) {
@@ -10713,7 +10722,7 @@ static bool checkprevfieldlinestateequal(void)
                                        ret = draw_border_fast(l, linear_display_vpos + 1);
                                }
                        }
-               } else if (type == LINETYPE_BPL && strobe_fast == 0x3c && !l->blankedline) {
+               } else if (type == LINETYPE_BPL && !vb_fast && !l->blankedline) {
                        if (1) {
                                int r = checkprevfieldlinestateequalbpl(l);
                                if ((r && always) || (r && currprefs.cs_optimizations == DISPLAY_OPTIMIZATIONS_FULL)) {
@@ -11186,7 +11195,11 @@ static void custom_trigger_start(void)
                        }
                }
 #endif
-               strobe_fast = get_strobe_reg(0);
+               if (new_beamcon0 & BEAMCON0_VARVBEN) {
+                       vb_fast = get_strobe_reg(0) != 0x3c || vpos == vbstrt;
+               } else {
+                       vb_fast = get_strobe_reg(0) != 0x3c;
+               }
                int canline = can_fast_custom();
                if (canline) {
                        calculate_linetype(linear_display_vpos + 1);
@@ -12198,6 +12211,7 @@ static void sync_imm_evhandler(void)
        if (!custom_disabled) {
                eventtab[ev_sync].active = 0;
                write_log("Chipset emulation active\n");
+               rga_denise_cycle_line++;
                return;
        }
 
index 6e79707372650ffeffea025b08e1a597b9566311..2ef848e0d6b726bf9cbccf620e50ceba85cb82fb 100644 (file)
@@ -97,6 +97,7 @@ struct denise_rga_queue
        int strobe_pos;
        int erase;
        struct linestate *ls;
+       uae_u16 reg, val;
 };
 
 static volatile uae_atomic rga_queue_read, rga_queue_write;
@@ -106,6 +107,11 @@ static struct denise_rga_queue temp_line;
 static struct denise_rga_queue *this_line;
 static volatile bool thread_debug_lock;
 
+static void denise_handle_quick_strobe(uae_u16 strobe, int offset, int vpos);
+static void draw_denise_vsync(int);
+static void denise_update_reg(uae_u16 reg, uae_u16 v, int linecnt);
+static void draw_denise_line(int gfx_ypos, nln_how how, uae_u32 linecnt, int startpos, int total, int skip, int skip2, int dtotal, int calib_start, int calib_len, bool lol, int hdelay, struct linestate *ls);
+
 static void quick_denise_rga(int linecnt, int startpos, int endpos)
 {
        int pos = startpos;
@@ -114,16 +120,13 @@ static void quick_denise_rga(int linecnt, int startpos, int endpos)
        while (pos != endpos) {
                struct denise_rga *rd = &rga_denise[pos];
                if (rd->line == linecnt && rd->rga != 0x1fe && (rd->rga < 0x38 || rd->rga >= 0x40)) {
-                       denise_update_reg(rd->rga, rd->v);
+                       denise_update_reg(rd->rga, rd->v, linecnt);
                }
                pos++;
                pos &= DENISE_RGA_SLOT_MASK;
        }
 }
 
-static void denise_handle_quick_strobe(uae_u16 strobe, int offset, int vpos);
-static void draw_denise_vsync(int);
-
 static void update_overlapped_cycles(int endpos)
 {
        for (int i = 0; i <= MAX_RGA_OVERLAPPING_CYCLES; i++) {
@@ -134,14 +137,12 @@ static void update_overlapped_cycles(int endpos)
 
 static void read_denise_line_queue(void)
 {
+       bool nolock = false;
+
        while (rga_queue_read == rga_queue_write) {
                uae_sem_wait(&write_sem);
        }
 
-       if (!thread_debug_lock) {
-               write_log("read_denise_line_queue: queue processed without lock!\n");
-       }
-
        struct denise_rga_queue *q = &rga_queue[rga_queue_read & DENISE_RGA_SLOT_CHUNKS_MASK];
        this_line = q;
        bool next = false;
@@ -167,6 +168,15 @@ static void read_denise_line_queue(void)
                next = true;
        } else if (q->type == 5) {
                draw_denise_vsync(q->erase);
+       } else if (q->type == 6) {
+               denise_update_reg(q->reg, q->val, q->linecnt);
+               nolock = true;
+       }
+
+       if (!nolock) {
+               if (!thread_debug_lock) {
+                       write_log("read_denise_line_queue: queue processed without lock!\n");
+               }
        }
 
        //evt_t t2 = read_processor_time();
@@ -177,8 +187,10 @@ static void read_denise_line_queue(void)
                update_overlapped_cycles(q->endpos);
        }
 
-       if (!thread_debug_lock) {
-               write_log("read_denise_line_queue: queue lock was released during draw!\n");
+       if (!nolock) {
+               if (!thread_debug_lock) {
+                       write_log("read_denise_line_queue: queue lock was released during draw!\n");
+               }
        }
 
 #if 0
@@ -487,6 +499,8 @@ static int hstrt_offset, hstop_offset;
 static int bpl1dat_trigger_offset;
 static int internal_pixel_cnt, internal_pixel_start_cnt;
 static bool no_denise_lol, denise_strlong_seen;
+#define STRLONG_SEEN_DELAY 2
+static int denise_strlong_seen_delay;
 
 void set_inhibit_frame(int monid, int bit)
 {
@@ -558,7 +572,7 @@ bool isnativevidbuf(int monid)
        struct vidbuf_description *vidinfo = &adisplays[monid].gfxvidinfo;
        if (vidinfo->outbuffer == NULL)
                return false;
-       if (vidinfo->outbuffer == &vidinfo->drawbuffer)
+       if (vidinfo->outbuffer == vidinfo->inbuffer)
                return true;
        return !vidinfo->outbuffer->hardwiredpositioning;
 }
@@ -581,9 +595,8 @@ static int stored_left_start, stored_top_start, stored_width, stored_height;
 void get_custom_topedge (int *xp, int *yp, bool max)
 {
        if (isnativevidbuf(0) && !max) {
-               int x, y;
-               x = visible_left_border;
-               y = minfirstline << currprefs.gfx_vresolution;
+               int x = visible_left_border;
+               int y = minfirstline << currprefs.gfx_vresolution;
 #if 0
                int dbl1, dbl2;
                dbl2 = dbl1 = currprefs.gfx_vresolution;
@@ -698,10 +711,11 @@ void check_custom_limits(void)
        denise_vblank_extra_top = -1;
        denise_vblank_extra_bottom = 30000;
 
-       // backwards compatibility, old 0x38 start is gone. (0x38-1 = adjustment for v6)
        if (left > 0) {
-               left += (0x37 * 4) >> (RES_MAX - currprefs.gfx_resolution);
-               right += (0x37 * 4) >> (RES_MAX - currprefs.gfx_resolution);
+               left += (0x38 * 4) >> (RES_MAX - currprefs.gfx_resolution);
+       }
+       if (right > 0) {
+               right += (0x38 * 4) >> (RES_MAX - currprefs.gfx_resolution);
        }
 
        if (left > visible_left_start) {
@@ -1892,6 +1906,8 @@ static void finish_drawing_frame(bool drawlines)
        }
 
        vbout->last_drawn_line = 0;
+       vbout->hardwiredpositioning = false;
+
        draw_frame_extras(vbin, -1, -1);
 
 #ifdef WITH_SPECIALMONITORS
@@ -3128,7 +3144,7 @@ static void expand_bplcon0(uae_u16 v)
        update_fmode();
        update_specials();
        update_sprres();
-       if ((old & 1) != (bplcon0_denise)) {
+       if ((old & 1) != (bplcon0_denise & 1)) {
                update_ecs_features();
                update_genlock();
        }
@@ -3221,11 +3237,13 @@ static void expand_clxcon2(uae_u16 v)
 static void set_strlong(void)
 {
        denise_strlong_seen = true;
+       denise_strlong_seen_delay = STRLONG_SEEN_DELAY;
        if (no_denise_lol) {
+               int add = 1 << hresolution;
                denise_strlong = false;
                denise_strlong_fast = true;
-               denise_lol_shift_enable = false;
-               denise_lol_shift_prev = 0;
+               denise_lol_shift_enable = true;
+               denise_lol_shift_prev = add;
                return;
        }
        denise_strlong = true;
@@ -3725,9 +3743,15 @@ static void expand_drga(struct denise_rga *rd)
                        agnus_lol = (rd->flags & DENISE_RGA_FLAG_LOL_ON) != 0;
                        if (no_denise_lol) {
                                int add = 1 << hresolution;
-                               agnus_lol = false;
-                               denise_lol_shift_enable = true;
-                               denise_lol_shift_prev = add;
+                               if (denise_strlong_seen) {
+                                       agnus_lol = false;
+                                       denise_lol_shift_enable = true;
+                                       denise_lol_shift_prev = add;
+                               } else {
+                                       agnus_lol = false;
+                                       denise_lol_shift_enable = false;
+                                       denise_lol_shift_prev = add;
+                               }
                        } else {
                                if (!agnus_lol && (!denise_lol_shift_prev || denise_lol_shift_enable)) {
                                        int add = 1 << hresolution;
@@ -3862,8 +3886,29 @@ static void expand_drga(struct denise_rga *rd)
        }
 }
 
-void denise_update_reg(uae_u16 reg, uae_u16 v)
+static void flush_fast_rga(int linecnt)
+{
+       // extract fast CPU RGA pipeline
+       while (rga_denise_fast_write != rga_denise_fast_read) {
+               struct denise_rga *rd = &rga_denise_fast[rga_denise_fast_read];
+               if (linecnt < rd->line) {
+                       break;
+               }
+               expand_drga(rd);
+               expand_drga_early(rd);
+               expand_drga_early2x(rd);
+               rga_denise_fast_read++;
+               rga_denise_fast_read &= DENISE_RGA_SLOT_FAST_TOTAL - 1;
+       }
+}
+
+static void denise_update_reg(uae_u16 reg, uae_u16 v, int linecnt)
 {
+       // makes sure fast queue is flushed first
+       if (rga_denise_fast_write != rga_denise_fast_read) {
+               flush_fast_rga(linecnt);
+       }
+
        struct denise_rga dr = { 0 };
        dr.rga = reg;
        dr.v = v;
@@ -4591,7 +4636,7 @@ static void denise_handle_quick_strobe(uae_u16 strobe, int offset, int vpos)
        }
 }
 
-bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 cycle)
+bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 linecnt)
 {
        if (((rga_denise_fast_write + 1) & (DENISE_RGA_SLOT_FAST_TOTAL - 1))  == rga_denise_fast_read) {
                return false;
@@ -4599,13 +4644,12 @@ bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 cycle)
        struct denise_rga *r = &rga_denise_fast[rga_denise_fast_write];
        r->rga = reg;
        r->v = v;
-       r->line = cycle;
+       r->line = linecnt;
        rga_denise_fast_write++;
        rga_denise_fast_write &= DENISE_RGA_SLOT_FAST_TOTAL - 1;
        return true;
 }
 
-
 static void do_denise_cck(int linecnt, int startpos, int i)
 {
        int idxp = (i + startpos + 1) & DENISE_RGA_SLOT_MASK;
@@ -4618,18 +4662,7 @@ static void do_denise_cck(int linecnt, int startpos, int i)
        denise_hcounter_new &= 511;
 
        if (rga_denise_fast_write != rga_denise_fast_read) {
-               // extract fast CPU RGA pipeline
-               while (rga_denise_fast_write != rga_denise_fast_read) {
-                       struct denise_rga *rd = &rga_denise_fast[rga_denise_fast_read];
-                       if (linecnt < rd->line) {
-                               break;
-                       }
-                       expand_drga(rd);
-                       expand_drga_early(rd);
-                       expand_drga_early2x(rd);
-                       rga_denise_fast_read++;
-                       rga_denise_fast_read &= DENISE_RGA_SLOT_FAST_TOTAL - 1;
-               }
+               flush_fast_rga(linecnt);
        }
 
        struct denise_rga *rd;
@@ -5107,6 +5140,11 @@ static void emulate_black_level_calibration(uae_u32 *b1, uae_u32 *b2, uae_u32 *d
        }
 }
 
+static uae_u8 filter_pixel_genlock(uae_u8 p1, uae_u8 p2)
+{
+       return p1 | p2;
+}
+
 static uae_u32 filter_pixel(uae_u32 p1, uae_u32 p2)
 {
        uae_u32 v = 0;
@@ -5308,14 +5346,19 @@ static void draw_denise_vsync(int erase)
        struct vidbuf_description *vidinfo = &adisplays[0].gfxvidinfo;
        struct vidbuffer *vb = vidinfo->inbuffer;
 
-       if (!denise_strlong_seen && strlong_emulation) {
-               strlong_emulation = false;
-               write_log("STRLONG strobe emulation deactivated.\n");
-               select_lts();
-               denise_lol_shift_enable = false;
-               denise_lol_shift_prev = 0;
+       if (denise_strlong_seen_delay <= 0) {
+               if (!denise_strlong_seen && strlong_emulation) {
+                       int add = 1 << hresolution;
+                       strlong_emulation = false;
+                       write_log("STRLONG strobe emulation deactivated.\n");
+                       select_lts();
+                       denise_lol_shift_enable = false;
+                       denise_lol_shift_prev = add;
+               }
+               denise_strlong_seen = false;
+       } else {
+               denise_strlong_seen_delay--;
        }
-       denise_strlong_seen = false;
 
        if (erase) {
                // clear lines if mode height changed
@@ -5344,7 +5387,7 @@ static void denise_draw_update(void)
        denise_max_odd_even = denise_odd_even;
 }
 
-void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int startpos, int total, int skip, int skip2, int dtotal, int calib_start, int calib_len, bool lol, int hdelay, struct linestate *ls)
+static void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int startpos, int total, int skip, int skip2, int dtotal, int calib_start, int calib_len, bool lol, int hdelay, struct linestate *ls)
 {
        bool fullline = false; // currprefs.chipset_hr;
 
@@ -5484,29 +5527,35 @@ void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int start
                uae_u32 *hbstrt_ptr2 = buf2 && hbstrt_offset2 >= 0 ? buf2t + hbstrt_offset2 : NULL;
                uae_u32 *hbstop_ptr2 = buf2 && hbstop_offset2 >= 0 ? buf2t + hbstop_offset2 : NULL;
                // blank last pixel row if normal overscan mode, it might have NTSC artifacts
-               if (denise_strlong_seen && denise_pixtotal_max != -0x7fffffff && hbstrt_ptr1 && currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN && !ecs_denise) {
+               if (denise_strlong_seen && denise_pixtotal_max != -0x7fffffff && hbstrt_ptr1) {
                        int add = 1 << hresolution;
-                       uae_u32 *p1 = hbstrt_ptr1 - denise_lol_shift_prev;
-                       uae_u32 *p2 = hbstrt_ptr2 - denise_lol_shift_prev;
-                       for (int i = 0; i < add * 2; i++) {
-                               if (hbstrt_ptr1) {
-                                       *p1++ = BLANK_COLOR;
-                               }
-                               if (hbstrt_ptr2) {
-                                       *p2++ = BLANK_COLOR;
+                       uae_u32 *ptre1 = buf1;
+                       uae_u32 *ptre2 = buf2;
+                       if (no_denise_lol) {
+                               int padd = lol ? 0 : 2;
+                               uae_u32 *p1 = hbstrt_ptr1 - padd * add;
+                               uae_u32 *p2 = hbstrt_ptr2 - padd * add;
+                               for (int i = 0; i < add * 2; i++) {
+                                       if (hbstrt_ptr1 && p1 < ptre1) {
+                                               *p1++ = BLANK_COLOR;
+                                       }
+                                       if (hbstrt_ptr2 && p2 < ptre2) {
+                                               *p2++ = BLANK_COLOR;
+                                       }
                                }
-                       }
-               }
-               if (1 && no_denise_lol && denise_pixtotal_max != -0x7fffffff && hbstrt_ptr1 && !lol_fast && denise_strlong_seen) {
-                       int add = 1 << hresolution;
-                       uae_u32 *p1 = hbstrt_ptr1 - 2 * add;
-                       uae_u32 *p2 = hbstrt_ptr2 - 2 * add;
-                       for (int i = 0; i < add * 2; i++) {
-                               if (hbstrt_ptr1) {
-                                       *p1++ = BLANK_COLOR;
+                               if (!lol) {
+                                       hbstrt_offset -= (1 << RES_MAX) * 2;
                                }
-                               if (hbstrt_ptr2) {
-                                       *p2++ = BLANK_COLOR;
+                       } else if (!ecs_denise && currprefs.gfx_overscanmode <= OVERSCANMODE_OVERSCAN) {
+                               uae_u32 *p1 = hbstrt_ptr1 - denise_lol_shift_prev;
+                               uae_u32 *p2 = hbstrt_ptr2 - denise_lol_shift_prev;
+                               for (int i = 0; i < add * 2; i++) {
+                                       if (hbstrt_ptr1 && p1 < ptre1) {
+                                               *p1++ = BLANK_COLOR;
+                                       }
+                                       if (hbstrt_ptr2 && p2 < ptre2) {
+                                               *p2++ = BLANK_COLOR;
+                                       }
                                }
                        }
                }
@@ -5525,53 +5574,73 @@ void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int start
                                                ptr = hbstrt_ptr1;
                                                ptrs = buf1t;
                                                ptre = buf1;
-                                               lolshift = lol ? add : 0;
+                                               lolshift = no_denise_lol ? (lol ? add : -add) : (lol ? add : 0);
                                                w = ww2;
                                                break;
                                        case 1:
                                                ptr = hbstrt_ptr2;
                                                ptrs = buf2t;
                                                ptre = buf2;
-                                               lolshift = lol ? add : 0;
+                                               lolshift = no_denise_lol ? (lol ? add : -add) : (lol ? add : 0);
                                                w = ww2;
                                                break;
                                        case 2:
                                                ptr = hbstop_ptr1;
                                                ptrs = buf1t;
                                                ptre = buf1;
-                                               lolshift = lol ? 0 : add;
+                                               lolshift = lol || no_denise_lol ? 0 : add;
                                                w = ww1;
                                                break;
                                        case 3:
                                                ptr = hbstop_ptr2;
                                                ptrs = buf2t;
                                                ptre = buf2;
-                                               lolshift = lol ? 0 : add;
+                                               lolshift = lol || no_denise_lol ? 0 : add;
                                                w = ww1;
                                                break;
                                }
                                if (ptr && w) {
-                                       uae_u32 *p1 = ptr + (denise_strlong_seen ? lolshift : 0);
-                                       int ww = w;
+                                       int lolshift2 = denise_strlong_seen ? lolshift : 0;
+                                       uae_u32 *p1 = ptr + lolshift2;
                                        if (i >= 2) {
-                                               if (p1 + ww > ptrs && p1 + ww < ptre) {
+                                               if (p1 + w > ptrs && p1 < ptre) {
+                                                       int wxadd = 0;
                                                        if (p1 < ptrs) {
-                                                               int wadd = addrdiff(p1, ptrs);
-                                                               ww -= wadd;
-                                                               p1 += add;
+                                                               wxadd = addrdiff(p1, ptrs);
+                                                               w -= wxadd;
+                                                               p1 += wxadd;
                                                        }
-                                                       memset(p1, DEBUG_TVOVERSCAN_H_GRAYSCALE, ww * sizeof(uae_u32));
-                                                       if (bufg) {
-                                                               uae_u8 *gp1 = (p1 - ptrs) + bufg;
-                                                               memset(gp1, 0, ww);
+                                                       if (p1 + w > ptre) {
+                                                               int wadd = addrdiff(p1 + w, ptre);
+                                                               w -= wadd;
+                                                       }
+                                                       if (w > 0) {
+                                                               memset(p1, DEBUG_TVOVERSCAN_H_GRAYSCALE, w * sizeof(uae_u32));
+                                                               if (bufg) {
+                                                                       uae_u8 *gp1 = (p1 - ptrs) + bufg + wxadd;
+                                                                       memset(gp1, 0, w);
+                                                               }
                                                        }
                                                }
                                        } else {
-                                               if (p1 < ptre && p1 - w >= ptrs) {
-                                                       memset(p1 - ww, DEBUG_TVOVERSCAN_H_GRAYSCALE, w * sizeof(uae_u32));
-                                                       if (bufg) {
-                                                               uae_u8 *gp1 = (p1 - ptrs) + bufg;
-                                                               memset(gp1 - ww, 0, w);
+                                               if (p1 - w < ptre && p1 >= ptrs) {
+                                                       int wxadd = 0;
+                                                       p1 -= w;
+                                                       if (p1 < ptrs) {
+                                                               wxadd = addrdiff(ptrs, p1);
+                                                               p1 += wxadd;
+                                                               w -= wxadd;
+                                                       }
+                                                       if (p1 + w > ptre) {
+                                                               int wadd = addrdiff(p1 + w, ptre);
+                                                               w -= wadd;
+                                                       }
+                                                       if (w > 0) {
+                                                               memset(p1, DEBUG_TVOVERSCAN_H_GRAYSCALE, w * sizeof(uae_u32));
+                                                               if (bufg) {
+                                                                       uae_u8 *gp1 = (p1 - ptrs) + bufg + wxadd;
+                                                                       memset(gp1, 0, w);
+                                                               }
                                                        }
                                                }
                                        }
@@ -5593,6 +5662,8 @@ void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, int start
                ls->internal_pixel_cnt = internal_pixel_cnt;
                ls->internal_pixel_start_cnt = internal_pixel_start_cnt;
                ls->blankedline = blankedline;
+               ls->strlong_seen = denise_strlong_seen;
+               ls->lol = lol;
        }
 
        resolution_count[denise_res]++;
@@ -5696,11 +5767,19 @@ static void select_lts(void)
                if (hresolution == RES_LORES) {
                        lts = lts_null;
                } else {
-                       int idx = hresolution - 1;
-                       if (need_genlock_data) {
-                               lts = linetoscr_ecs_shres_genlock_funcs[idx];
+                       int idx = hresolution;
+                       if (idx == RES_HIRES && currprefs.gfx_lores_mode) {
+                               if (need_genlock_data) {
+                                       lts = lts_ecs_shres_dhires_genlock_filtered;
+                               } else {
+                                       lts = lts_ecs_shres_dhires_filtered;
+                               }
                        } else {
-                               lts = linetoscr_ecs_shres_funcs[idx];
+                               if (need_genlock_data) {
+                                       lts = linetoscr_ecs_shres_genlock_funcs[idx];
+                               } else {
+                                       lts = linetoscr_ecs_shres_funcs[idx];
+                               }
                        }
                }
 
@@ -6352,17 +6431,17 @@ static void pfield_doline_8(int planecnt, int wordcount, uae_u8 *datap, struct l
        }
 }
 
-static void tvadjust(int *hbstrt_offset, int *hbstop_offset)
+static void tvadjust(int *hbstrt_offset, int *hbstop_offset, struct linestate *ls)
 {
        if (!programmedmode && currprefs.gfx_overscanmode < OVERSCANMODE_EXTREME) {
-               int ww1 = visible_left_start > visible_left_border ? (visible_left_start - visible_left_border) << 0 : 0;
-               int ww2 = visible_right_border > visible_right_stop ? (visible_right_border - visible_right_stop) << 0 : 0;
+               int right = denise_strlong_seen ? denise_hblank_extra_right + (1 << currprefs.gfx_resolution) : denise_hblank_extra_right;
+               int ww1 = denise_hblank_extra_left > visible_left_border ? (denise_hblank_extra_left - visible_left_border) << 0 : 0;
+               int ww2 = visible_right_border > right ? (visible_right_border - right) << 0 : 0;
        
-               if (ww2 >= 0 && hbstrt_offset) {
+               if (hbstrt_offset && ww2 > 0) {
                        *hbstrt_offset -= ww2;
                }
-               if (ww1 >= (1 << hresolution) && hbstop_offset) {
-                       ww1 -= (1 << hresolution);
+               if (hbstop_offset && ww1 > 0) {
                        *hbstop_offset += ww1;
                }
        }
@@ -6385,9 +6464,61 @@ static int l_shift(int v, int shift)
        }
 }
 
+static void fill_border(int total, uae_u32 bgcol)
+{
+       if (buf2) {
+               while (total >= 8) {
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+                       *buf2++ = bgcol;
+
+                       total -= 8;
+               }
+               while (total > 0) {
+                       *buf1++ = bgcol;
+                       *buf2++ = bgcol;
+                       total--;
+               }
+       } else {
+               while (total >= 8) {
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       *buf1++ = bgcol;
+                       total -= 8;
+               }
+               while (total > 0) {
+                       *buf1++ = bgcol;
+                       total--;
+               }
+       }
+}
+
 // draw border from hb to hb
 void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linestate *ls)
 {
+       if (ls->strlong_seen) {
+               set_strlong();
+       }
+
        get_line(gfx_ypos, how);
 
        if (!buf1) {
@@ -6417,7 +6548,7 @@ void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linesta
        int hbstrt_offset = ls->hbstrt_offset >> rshift;
        int hbstop_offset = ls->hbstop_offset >> rshift;
 
-       tvadjust(&hbstrt_offset, &hbstop_offset);
+       tvadjust(&hbstrt_offset, &hbstop_offset, ls);
 
        int draw_end = ls->internal_pixel_cnt >> rshift;
        int draw_startoffset = ls->internal_pixel_start_cnt >> rshift;
@@ -6431,57 +6562,18 @@ void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linesta
        if (start < hbstop_offset) {
                int diff = hbstop_offset - start;
                buf1 += diff;
-               buf2 += diff;
-               gbufp += diff;
+               if (buf2) {
+                       buf2 += diff;
+               }
+               if (gbufp) {
+                       gbufp += diff;
+               }
                start = hbstop_offset;
        }
        int end = draw_end > hbstrt_offset ? hbstrt_offset : draw_end;
        int total = end - start;
 
-       if (buf2p) {
-               while (total >= 8) {
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-                       *buf2++ = bgcol;
-
-                       total -= 8;
-               }
-               while (total > 0) {
-                       *buf1++ = bgcol;
-                       *buf2++ = bgcol;
-                       total--;
-               }
-       } else {
-               while (total >= 8) {
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       *buf1++ = bgcol;
-                       total -= 8;
-               }
-               while (total > 0) {
-                       *buf1++ = bgcol;
-                       total--;
-               }
-       }
+       fill_border(total, bgcol);
 
        total = end - start;
        if (need_genlock_data && gbuf && total) {
@@ -6497,6 +6589,10 @@ void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linesta
 
 void draw_denise_bitplane_line_fast(int gfx_ypos, enum nln_how how, struct linestate *ls)
 {
+       if (ls->strlong_seen) {
+               set_strlong();
+       }
+
        get_line(gfx_ypos, how);
 
        if (!buf1) {
@@ -6640,9 +6736,9 @@ void draw_denise_bitplane_line_fast(int gfx_ypos, enum nln_how how, struct lines
 
        int hbstrt_offset = ls->hbstrt_offset >> rshift;
        int hbstop_offset = ls->hbstop_offset >> rshift;
-       
+
        // if HAM: need to clear left hblank after line has been drawn
-       tvadjust(&hbstrt_offset, ham ? NULL : &hbstop_offset);
+       tvadjust(&hbstrt_offset, ham ? NULL : &hbstop_offset, ls);
 
        // negative checks are needed to handle always-on HDIW
        int hstop_offset_adjusted = ls->hstop_offset;
@@ -6653,7 +6749,7 @@ void draw_denise_bitplane_line_fast(int gfx_ypos, enum nln_how how, struct lines
                }
        }
        int hstrt_offset = ls->hstrt_offset < 0 || ls->hstop_offset < 0 || (ls->hstrt_offset >> rshift) >= hbstrt_offset ? hbstop_offset : ls->hstrt_offset >> rshift;
-       int hstop_offset = hstop_offset_adjusted < 0 ? hbstrt_offset : hstop_offset_adjusted >> rshift;
+       int hstop_offset = hstop_offset_adjusted < 0 || (hstop_offset_adjusted >> rshift) >= hbstrt_offset ? hbstrt_offset : hstop_offset_adjusted >> rshift;
        int bpl1dat_trigger_offset = (ls->bpl1dat_trigger_offset + (1 << RES_MAX)) >> rshift;
        int draw_start = 0;
        int draw_end = ls->internal_pixel_cnt >> rshift;
@@ -6706,6 +6802,13 @@ void draw_denise_bitplane_line_fast(int gfx_ypos, enum nln_how how, struct lines
        ltsf(draw_start, draw_end, draw_startoffset, hbstrt_offset, hbstop_offset, hstrt_offset, hstop_offset, bpl1dat_trigger_offset,
                planecnt, bgcol, cp, cp2, cpadd, cpadds, bufadd, ls);
 
+#if 0
+       *buf1++ = 0;
+       *buf1++ = 0;
+       *buf2++ = 0;
+       *buf2++ = 0;
+#endif
+
        if (!programmedmode && ham) {
                int ww1 = visible_left_start > visible_left_border ? (visible_left_start - visible_left_border) << 0 : 0;
                if (ww1 > 0) {
@@ -6901,17 +7004,20 @@ static void updatelinedata(void)
        this_line->linear_vpos = linear_vpos;
 }
 
+static bool waitqueue_nolock(void)
+{
+       while (((rga_queue_write + 1) & DENISE_RGA_SLOT_CHUNKS_MASK) == (rga_queue_read & DENISE_RGA_SLOT_CHUNKS_MASK)) {
+               uae_sem_trywait_delay(&read_sem, 500);
+       }
+       return true;
+}
 static bool waitqueue(void)
 {
        if (!thread_debug_lock) {
                write_log("Denise queue without lock!\n");
                return false;
        }
-
-
-       while (((rga_queue_write + 1) & DENISE_RGA_SLOT_CHUNKS_MASK) == (rga_queue_read & DENISE_RGA_SLOT_CHUNKS_MASK)) {
-               uae_sem_trywait_delay(&read_sem, 500);
-       }
+       waitqueue_nolock();
        return true;
 }
 static void addtowritequeue(void)
@@ -7088,6 +7194,31 @@ void draw_denise_vsync_queue(int erase)
        }
 }
 
+void denise_update_reg_queue(uae_u16 reg, uae_u16 v, uae_u32 linecnt)
+{
+       if (MULTITHREADED_DENISE) {
+
+               if (!waitqueue_nolock()) {
+                       return;
+               }
+               struct denise_rga_queue *q = &rga_queue[rga_queue_write & DENISE_RGA_SLOT_CHUNKS_MASK];
+               q->type = 6;
+               q->vpos = vpos;
+               q->linear_vpos = linear_vpos;
+               q->reg = reg;
+               q->val = v;
+               q->linecnt = linecnt;
+
+               addtowritequeue();
+
+       } else {
+
+               updatelinedata();
+               denise_update_reg(reg, v, linecnt);
+
+       }
+}
+
 void draw_denise_line_queue_flush(void)
 {
        if (MULTITHREADED_DENISE) {
index 94902b55e7c7702c7be9c0102c3a040c987a69df..8074b6ad3d572258fd89a495028e9b47f44f74a8 100644 (file)
@@ -615,6 +615,9 @@ static void gen_pix_aga(void)
                }
                if (filtered) {
                        outf("dpix_val%d = filter_pixel(dpix_val%d, dpix_val%d);", off, off, off + 1);
+                       if (genlock) {
+                               outf("gpix%d = filter_pixel_genlock(gpix%d, gpix%d);", off, off, off + 1);
+                       }
                }
                if (ntsc) {
                        outf("dtbuf[h][%d] = dpix_val%d;", off, off);
@@ -762,6 +765,9 @@ static void gen_pix(void)
 
                if (filtered) {
                        outf("dpix_val%d = filter_pixel(dpix_val%d, dpix_val%d);", off, off, off + 1);
+                       if (genlock) {
+                               outf("gpix%d = filter_pixel_genlock(gpix%d, gpix%d);", off, off, off + 1);
+                       }
                }
 
                if (sprt[i]) {
@@ -1051,6 +1057,12 @@ static void gen_fastdraw_mode(int off, int total)
                } else {
                        outf("get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);");
                }
+               if (doubling < 0) {
+                       outf("dpix_val0 = filter_pixel(dpix_val0, dpix_val1);");
+                       if (genlock) {
+                               outf("gpix0 = filter_pixel_genlock(gpix0, gpix1);");
+                       }
+               }
                outf("*buf1++ = dpix_val0;");
                if (doubling == 0) {
                        outf("*buf1++ = dpix_val1;");
@@ -1208,7 +1220,7 @@ static void gen_fastdraw(void)
                outf("uae_u8 c;");
                outf("uae_u32 col;");
        }
-       if (doubling <= 0 || (res == 2 && !aga)) {
+       if (doubling <= 0) {
                gen_fastdraw_mode(0, 1);
        } else if (doubling == 1) {
                gen_fastdraw_mode(0, 2);
@@ -1692,86 +1704,103 @@ int main (int argc, char *argv[])
 
        for (genlock = 0; genlock < 2; genlock++) {
                for (outres = 1; 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 && denise_pixtotal < denise_pixtotal_max) {");
-                               gen_storepix(0, 0);
-                               gen_storepix(2, 2);
+                       for(filtered = 0; filtered < 2;filtered++) {
+                               if (filtered && outres != 1) {
+                                       continue;
+                               }
+                               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;
+                               if (filtered) {
+                                       strcat(funcname, "_filtered");
+                               }
+                               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("}");
-                       } else if (outres == 2) {
-                               gen_sprpix(0);
-                               gen_matchspr(0);
-                               gen_sprpix(1);
-                               gen_matchspr(2);
-                               gen_ecsshresspr();
-                               outf("if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {");
-                               gen_storepix(0, 0);
-                               gen_storepix(1, 1);
-                               gen_storepix(2, 2);
-                               gen_storepix(3, 3);
                                outf("}");
+                               if (outres == 1) {
+                                       gen_sprpix(0);
+                                       gen_matchspr(0);
+                                       gen_sprpix(1);
+                                       gen_matchspr(2);
+                                       gen_ecsshresspr();
+                                       outf("if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {");
+                                       if (filtered) {
+                                               outf("dpix_val0 = filter_pixel(dpix_val0, dpix_val1);");
+                                               outf("dpix_val2 = filter_pixel(dpix_val2, dpix_val3);");
+                                               if (genlock) {
+                                                       outf("gpix0 = filter_pixel_genlock(gpix0, gpix1);");
+                                                       outf("gpix2 = filter_pixel_genlock(gpix2, gpix3);");
+                                               }
+                                       }
+                                       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 && denise_pixtotal < denise_pixtotal_max) {");
+                                       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();
+                               outf("internal_pixel_cnt += 4;");
+                               gen_end();
+                               gen_tail();
                        }
-                       outf("if (!shifted) {");
-                       outf("shiftbpl2();");
-                       outf("shiftbpl2();");
-                       outf("shiftbpl2();");
-                       outf("shiftbpl2();");
-                       outf("}");
-                       gen_copybpl();
-                       outf("internal_pixel_cnt += 4;");
-                       gen_end();
-                       gen_tail();
                }
 
                write_funcs(genlock ? "linetoscr_ecs_shres_genlock_funcs" : "linetoscr_ecs_shres_funcs");
        }
 
        // fast drawing
+       filtered = 0;
        genlock = 0;
 
        set_outfile("../../linetoscr_ecs_fast.cpp");
index 16eea08349b17c25758e09cacbfc75505d86e59e..508b1c9c4e1281164dc0a444a3e82e74852d9ad7 100644 (file)
@@ -170,14 +170,15 @@ struct linestate
        int bpl1dat_trigger_offset;
        int internal_pixel_cnt;
        int internal_pixel_start_cnt;
+       bool lol;
        bool blankedline;
+       bool strlong_seen;
        int fetchmode_size, fetchstart_mask;
        uae_u16 strobe;
        int strobe_pos;
 };
 
 extern struct color_entry denise_colors;
-void draw_denise_line(int gfx_ypos, nln_how how, uae_u32 linecnt, int startpos, int total, int skip, int skip2, int dtotal, int calib_start, int calib_len, bool lol, int hdelay, struct linestate *ls);
 void draw_denise_line_queue(int gfx_ypos, nln_how how, uae_u32 linecnt, int startpos, int endpos, int total, int skip, int skip2, int dtotal, int calib_start, int calib_len, bool lof, bool lol, int hdelay, struct linestate *ls);
 void draw_denise_bitplane_line_fast(int gfx_ypos, enum nln_how how, struct linestate *ls);
 void draw_denise_bitplane_line_fast_queue(int gfx_ypos, enum nln_how how, struct linestate *ls);
@@ -186,9 +187,8 @@ void draw_denise_border_line_fast_queue(int gfx_ypos, enum nln_how how, struct l
 bool start_draw_denise(void);
 void end_draw_denise(void);
 bool has_draw_denise(void);
-void denise_update_reg(uae_u16 reg, uae_u16 v);
 void denise_reset(bool);
-bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 cycle);
+bool denise_update_reg_queued(uae_u16 reg, uae_u16 v, uae_u32 linecnt);
 void denise_store_registers(void);
 void denise_restore_registers(void);
 bool denise_is_vb(void);
@@ -199,5 +199,6 @@ void denise_handle_quick_strobe_queue(uae_u16 strobe, int strobe_pos, int endpos
 bool drawing_can_lineoptimizations(void);
 void set_drawbuffer(void);
 int gethresolution(void);
+void denise_update_reg_queue(uae_u16 reg, uae_u16 v, uae_u32 linecnt);
 
 #endif /* UAE_DRAWING_H */
index 80117f99376b9094c750a3dd0fe429cf872af9ef..8c7fca9ad5ce816fa7f75d41889839d8f1553ca3 100644 (file)
@@ -1863,6 +1863,7 @@ static void lts_aga_fm0_n0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2020,6 +2021,7 @@ static void lts_aga_fm0_n1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2183,6 +2185,7 @@ static void lts_aga_fm0_dpf0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2355,6 +2358,7 @@ static void lts_aga_fm0_dpf1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2666,6 +2670,7 @@ static void lts_aga_fm0_n0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2858,6 +2863,7 @@ static void lts_aga_fm0_n1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3056,6 +3062,7 @@ static void lts_aga_fm0_dpf0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3263,6 +3270,7 @@ static void lts_aga_fm0_dpf1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
index 2af7991a97db46a5e910f2a1d9eb917bfd2f8692..b7542f542502b958b848e3b34af3baa6dd0a8d18 100644 (file)
@@ -1863,6 +1863,7 @@ static void lts_aga_fm1_n0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2020,6 +2021,7 @@ static void lts_aga_fm1_n1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2183,6 +2185,7 @@ static void lts_aga_fm1_dpf0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2355,6 +2358,7 @@ static void lts_aga_fm1_dpf1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2551,6 +2555,7 @@ static void lts_aga_fm1_n0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2708,6 +2713,7 @@ static void lts_aga_fm1_n1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2871,6 +2877,7 @@ static void lts_aga_fm1_dpf0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3043,6 +3050,7 @@ static void lts_aga_fm1_dpf1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3223,6 +3231,7 @@ static void lts_aga_fm1_ham0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3399,6 +3408,7 @@ static void lts_aga_fm1_ham1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3598,6 +3608,7 @@ static void lts_aga_fm1_n0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3790,6 +3801,7 @@ static void lts_aga_fm1_n1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3988,6 +4000,7 @@ static void lts_aga_fm1_dpf0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4195,6 +4208,7 @@ static void lts_aga_fm1_dpf1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4426,6 +4440,7 @@ static void lts_aga_fm1_n0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4618,6 +4633,7 @@ static void lts_aga_fm1_n1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4816,6 +4832,7 @@ static void lts_aga_fm1_dpf0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5023,6 +5040,7 @@ static void lts_aga_fm1_dpf1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5238,6 +5256,7 @@ static void lts_aga_fm1_ham0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5449,6 +5468,7 @@ static void lts_aga_fm1_ham1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -11647,9 +11667,11 @@ static void lts_aga_fm1_n0_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -11899,9 +11921,11 @@ static void lts_aga_fm1_n1_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12163,9 +12187,11 @@ static void lts_aga_fm1_dpf0_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12445,9 +12471,11 @@ static void lts_aga_fm1_dpf1_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12868,6 +12896,7 @@ static void lts_aga_fm1_n0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -12880,6 +12909,7 @@ static void lts_aga_fm1_n0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13190,6 +13220,7 @@ static void lts_aga_fm1_n1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -13202,6 +13233,7 @@ static void lts_aga_fm1_n1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13524,6 +13556,7 @@ static void lts_aga_fm1_dpf0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -13536,6 +13569,7 @@ static void lts_aga_fm1_dpf0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13876,6 +13910,7 @@ static void lts_aga_fm1_dpf1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -13888,6 +13923,7 @@ static void lts_aga_fm1_dpf1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
index a1a4dbbe46802de03af2fd95a8fd9a13f0ec6b17..d5c2a1fc7d3b9b6b3f537af13088cbae77433062 100644 (file)
@@ -1863,6 +1863,7 @@ static void lts_aga_fm2_n0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2020,6 +2021,7 @@ static void lts_aga_fm2_n1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2183,6 +2185,7 @@ static void lts_aga_fm2_dpf0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2355,6 +2358,7 @@ static void lts_aga_fm2_dpf1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2551,6 +2555,7 @@ static void lts_aga_fm2_n0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2708,6 +2713,7 @@ static void lts_aga_fm2_n1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -2871,6 +2877,7 @@ static void lts_aga_fm2_dpf0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3043,6 +3050,7 @@ static void lts_aga_fm2_dpf1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3223,6 +3231,7 @@ static void lts_aga_fm2_ham0_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3399,6 +3408,7 @@ static void lts_aga_fm2_ham1_p8_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 4;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3598,6 +3608,7 @@ static void lts_aga_fm2_n0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3790,6 +3801,7 @@ static void lts_aga_fm2_n1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -3988,6 +4000,7 @@ static void lts_aga_fm2_dpf0_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4195,6 +4208,7 @@ static void lts_aga_fm2_dpf1_p4_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4426,6 +4440,7 @@ static void lts_aga_fm2_n0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4618,6 +4633,7 @@ static void lts_aga_fm2_n1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -4816,6 +4832,7 @@ static void lts_aga_fm2_dpf0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5023,6 +5040,7 @@ static void lts_aga_fm2_dpf1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5238,6 +5256,7 @@ static void lts_aga_fm2_ham0_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -5449,6 +5468,7 @@ static void lts_aga_fm2_ham1_p8_ihires_dlores_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -11647,9 +11667,11 @@ static void lts_aga_fm2_n0_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -11899,9 +11921,11 @@ static void lts_aga_fm2_n1_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12163,9 +12187,11 @@ static void lts_aga_fm2_dpf0_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12445,9 +12471,11 @@ static void lts_aga_fm2_dpf1_p4_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12727,9 +12755,11 @@ static void lts_aga_fm2_n0_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -12979,9 +13009,11 @@ static void lts_aga_fm2_n1_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13243,9 +13275,11 @@ static void lts_aga_fm2_dpf0_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13525,9 +13559,11 @@ static void lts_aga_fm2_dpf1_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -13807,9 +13843,11 @@ static void lts_aga_fm2_ham0_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -14097,9 +14135,11 @@ static void lts_aga_fm2_ham1_p8_ishres_dhires_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -14408,6 +14448,7 @@ static void lts_aga_fm2_n0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -14420,6 +14461,7 @@ static void lts_aga_fm2_n0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -14730,6 +14772,7 @@ static void lts_aga_fm2_n1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -14742,6 +14785,7 @@ static void lts_aga_fm2_n1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -15064,6 +15108,7 @@ static void lts_aga_fm2_dpf0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -15076,6 +15121,7 @@ static void lts_aga_fm2_dpf0_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -15416,6 +15462,7 @@ static void lts_aga_fm2_dpf1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -15428,6 +15475,7 @@ static void lts_aga_fm2_dpf1_p4_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -15768,6 +15816,7 @@ static void lts_aga_fm2_n0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -15780,6 +15829,7 @@ static void lts_aga_fm2_n0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -16090,6 +16140,7 @@ static void lts_aga_fm2_n1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -16102,6 +16153,7 @@ static void lts_aga_fm2_n1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -16424,6 +16476,7 @@ static void lts_aga_fm2_dpf0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -16436,6 +16489,7 @@ static void lts_aga_fm2_dpf0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -16776,6 +16830,7 @@ static void lts_aga_fm2_dpf1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -16788,6 +16843,7 @@ static void lts_aga_fm2_dpf1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -17128,6 +17184,7 @@ static void lts_aga_fm2_ham0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -17140,6 +17197,7 @@ static void lts_aga_fm2_ham0_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
@@ -17488,6 +17546,7 @@ static void lts_aga_fm2_ham1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                if (sv2) {
@@ -17500,6 +17559,7 @@ static void lts_aga_fm2_ham1_p8_ishres_dhires_spr_filtered_genlock(void)
                                        }
                                }
                                dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
                                dtbuf[h][2] = dpix_val2;
                                dtgbuf[h][2] = gpix2;
                                uae_u32 t0 = dtbuf[h ^ lol][0]; 
index efd44960c11f2273ab3ee1014180a1607ff898d7..f228cb29691abd86f516a69afad53aaabff97b85 100644 (file)
@@ -1380,6 +1380,7 @@ static void lts_ecs_n_ishres_dhires_b1(int draw_start, int draw_end, int draw_st
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1423,6 +1424,7 @@ static void lts_ecs_n_ishres_dhires_b1_filtered(int draw_start, int draw_end, in
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1466,6 +1468,7 @@ static void lts_ecs_dpf_ishres_dhires_b1(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1509,6 +1512,7 @@ static void lts_ecs_dpf_ishres_dhires_b1_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1552,6 +1556,7 @@ static void lts_ecs_ehb_ishres_dhires_b1(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1595,6 +1600,7 @@ static void lts_ecs_ehb_ishres_dhires_b1_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1638,6 +1644,7 @@ static void lts_ecs_ham_ishres_dhires_b1(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1681,6 +1688,7 @@ static void lts_ecs_ham_ishres_dhires_b1_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1724,6 +1732,7 @@ static void lts_ecs_kehb_ishres_dhires_b1(int draw_start, int draw_end, int draw
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -1767,6 +1776,7 @@ static void lts_ecs_kehb_ishres_dhires_b1_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                }
                if (cnt >= bpl1dat_trigger_offset && !bpl) {
@@ -4121,6 +4131,7 @@ static void lts_ecs_n_ishres_dhires_b2(int draw_start, int draw_end, int draw_st
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4167,6 +4178,7 @@ static void lts_ecs_n_ishres_dhires_b2_filtered(int draw_start, int draw_end, in
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4213,6 +4225,7 @@ static void lts_ecs_dpf_ishres_dhires_b2(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4259,6 +4272,7 @@ static void lts_ecs_dpf_ishres_dhires_b2_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4305,6 +4319,7 @@ static void lts_ecs_ehb_ishres_dhires_b2(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4351,6 +4366,7 @@ static void lts_ecs_ehb_ishres_dhires_b2_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4397,6 +4413,7 @@ static void lts_ecs_ham_ishres_dhires_b2(int draw_start, int draw_end, int draw_
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4443,6 +4460,7 @@ static void lts_ecs_ham_ishres_dhires_b2_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4489,6 +4507,7 @@ static void lts_ecs_kehb_ishres_dhires_b2(int draw_start, int draw_end, int draw
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
@@ -4535,6 +4554,7 @@ static void lts_ecs_kehb_ishres_dhires_b2_filtered(int draw_start, int draw_end,
                        uae_u8 c1 = *cp++;
                        uae_u32 dpix_val0, dpix_val1;
                        get_shres_pix(c0, c1, &dpix_val0, &dpix_val1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                }
index 7aa0be55bedbc4222527861aede3ee99ecb9692e..e00328a7ada342696b6f9890c98d01ef1df86168 100644 (file)
@@ -1524,6 +1524,8 @@ static void lts_ecs_n_ishres_dhires_b1_genlock(int draw_start, int draw_end, int
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1572,6 +1574,8 @@ static void lts_ecs_n_ishres_dhires_b1_filtered_genlock(int draw_start, int draw
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1620,6 +1624,8 @@ static void lts_ecs_dpf_ishres_dhires_b1_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1668,6 +1674,8 @@ static void lts_ecs_dpf_ishres_dhires_b1_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1716,6 +1724,8 @@ static void lts_ecs_ehb_ishres_dhires_b1_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1764,6 +1774,8 @@ static void lts_ecs_ehb_ishres_dhires_b1_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1812,6 +1824,8 @@ static void lts_ecs_ham_ishres_dhires_b1_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1860,6 +1874,8 @@ static void lts_ecs_ham_ishres_dhires_b1_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1908,6 +1924,8 @@ static void lts_ecs_kehb_ishres_dhires_b1_genlock(int draw_start, int draw_end,
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -1956,6 +1974,8 @@ static void lts_ecs_kehb_ishres_dhires_b1_filtered_genlock(int draw_start, int d
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *gbuf++ = gpix0;
                }
@@ -4595,6 +4615,8 @@ static void lts_ecs_n_ishres_dhires_b2_genlock(int draw_start, int draw_end, int
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4646,6 +4668,8 @@ static void lts_ecs_n_ishres_dhires_b2_filtered_genlock(int draw_start, int draw
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4697,6 +4721,8 @@ static void lts_ecs_dpf_ishres_dhires_b2_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4748,6 +4774,8 @@ static void lts_ecs_dpf_ishres_dhires_b2_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4799,6 +4827,8 @@ static void lts_ecs_ehb_ishres_dhires_b2_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4850,6 +4880,8 @@ static void lts_ecs_ehb_ishres_dhires_b2_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4901,6 +4933,8 @@ static void lts_ecs_ham_ishres_dhires_b2_genlock(int draw_start, int draw_end, i
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -4952,6 +4986,8 @@ static void lts_ecs_ham_ishres_dhires_b2_filtered_genlock(int draw_start, int dr
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -5003,6 +5039,8 @@ static void lts_ecs_kehb_ishres_dhires_b2_genlock(int draw_start, int draw_end,
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
@@ -5054,6 +5092,8 @@ static void lts_ecs_kehb_ishres_dhires_b2_filtered_genlock(int draw_start, int d
                        uae_u32 dpix_val0, dpix_val1;
                        uae_u8 gpix0, gpix1;
                        get_shres_pix_genlock(c0, c1, &dpix_val0, &dpix_val1, &gpix0, &gpix1);
+                       dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                       gpix0 = filter_pixel_genlock(gpix0, gpix1);
                        *buf1++ = dpix_val0;
                        *buf2++ = dpix_val0;
                        *gbuf++ = gpix0;
index 6331d45f911abb0144c734ea42a2e92eb0408b7a..a02e7d71091f202ea69818b07318a431134cba1d 100644 (file)
@@ -113,6 +113,117 @@ static void lts_ecs_shres_dhires(void)
                denise_cck++;
        }
 }
+static void lts_ecs_shres_dhires_filtered(void)
+{
+       while (denise_cck < denise_total) {
+               do_denise_cck(denise_linecnt, denise_startpos, denise_cck);
+               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 = BLANK_COLOR;
+                       uae_u8 pix1 = 0;
+                       uae_u32 dpix_val1 = BLANK_COLOR;
+                       uae_u8 pix2 = 0;
+                       uae_u32 dpix_val2 = BLANK_COLOR;
+                       uae_u8 pix3 = 0;
+                       uae_u32 dpix_val3 = BLANK_COLOR;
+                       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 && denise_pixtotal < denise_pixtotal_max) {
+                               dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               #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();
+                       }
+                       internal_pixel_cnt += 4;
+                       sprites_hidden = sprites_hidden2;
+                       #ifdef DEBUGGER
+                       *debug_dma_dhpos_odd = denise_hcounter;
+                       #endif
+                       denise_hcounter++;
+                       denise_hcounter &= 511;
+                       denise_hcounter_next++;
+                       denise_hcounter_next &= 511;
+               }
+               denise_pixtotal++;
+               if (denise_pixtotal == 0) {
+                       internal_pixel_start_cnt = internal_pixel_cnt;
+               }
+               denise_hcounter = denise_hcounter_new;
+               denise_cck++;
+       }
+}
 static void lts_ecs_shres_dshres(void)
 {
        while (denise_cck < denise_total) {
@@ -237,6 +348,7 @@ static void lts_ecs_shres_dshres(void)
        }
 }
 static LINETOSRC_FUNC linetoscr_ecs_shres_funcs[] = {
+       lts_ecs_shres_dhires,
        lts_ecs_shres_dhires,
        lts_ecs_shres_dshres,
        NULL
@@ -359,6 +471,125 @@ static void lts_ecs_shres_dhires_genlock(void)
                denise_cck++;
        }
 }
+static void lts_ecs_shres_dhires_genlock_filtered(void)
+{
+       while (denise_cck < denise_total) {
+               do_denise_cck(denise_linecnt, denise_startpos, denise_cck);
+               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_u8 gpix0 = 0xff;
+                       uae_u32 dpix_val0 = BLANK_COLOR;
+                       uae_u8 pix1 = 0;
+                       uae_u8 gpix1 = 0xff;
+                       uae_u32 dpix_val1 = BLANK_COLOR;
+                       uae_u8 pix2 = 0;
+                       uae_u8 gpix2 = 0xff;
+                       uae_u32 dpix_val2 = BLANK_COLOR;
+                       uae_u8 pix3 = 0;
+                       uae_u8 gpix3 = 0xff;
+                       uae_u32 dpix_val3 = BLANK_COLOR;
+                       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 && denise_pixtotal < denise_pixtotal_max) {
+                               dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               dpix_val2 = filter_pixel(dpix_val2, dpix_val3);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
+                               gpix2 = filter_pixel_genlock(gpix2, gpix3);
+                               #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();
+                       }
+                       internal_pixel_cnt += 4;
+                       sprites_hidden = sprites_hidden2;
+                       #ifdef DEBUGGER
+                       *debug_dma_dhpos_odd = denise_hcounter;
+                       #endif
+                       denise_hcounter++;
+                       denise_hcounter &= 511;
+                       denise_hcounter_next++;
+                       denise_hcounter_next &= 511;
+               }
+               denise_pixtotal++;
+               if (denise_pixtotal == 0) {
+                       internal_pixel_start_cnt = internal_pixel_cnt;
+               }
+               denise_hcounter = denise_hcounter_new;
+               denise_cck++;
+       }
+}
 static void lts_ecs_shres_dshres_genlock(void)
 {
        while (denise_cck < denise_total) {
@@ -491,6 +722,7 @@ static void lts_ecs_shres_dshres_genlock(void)
        }
 }
 static LINETOSRC_FUNC linetoscr_ecs_shres_genlock_funcs[] = {
+       lts_ecs_shres_dhires_genlock,
        lts_ecs_shres_dhires_genlock,
        lts_ecs_shres_dshres_genlock,
        NULL
index 49ccf6659e91947f5104fb4e5e140486909f983d..1c162d28cb97a432df9e177565612b5c0ee10219 100644 (file)
@@ -1398,6 +1398,7 @@ static void lts_ecs_fm0_n0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                uae_u32 t0 = 0;
                                if (!extblank) {
                                        t0 = dpix_val0; 
@@ -1556,6 +1557,7 @@ static void lts_ecs_fm0_n1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                uae_u32 t0 = 0;
                                if (!extblank) {
                                        t0 = dpix_val0; 
@@ -1718,6 +1720,7 @@ static void lts_ecs_fm0_dpf0_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                uae_u32 t0 = 0;
                                if (!extblank) {
                                        t0 = dpix_val0; 
@@ -1880,6 +1883,7 @@ static void lts_ecs_fm0_dpf1_p4_ihires_dlores_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                uae_u32 t0 = 0;
                                if (!extblank) {
                                        t0 = dpix_val0; 
@@ -2096,6 +2100,7 @@ static void lts_ecs_fm0_n0_p4_ihires_dlores_spr_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2289,6 +2294,7 @@ static void lts_ecs_fm0_n1_p4_ihires_dlores_spr_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2486,6 +2492,7 @@ static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2683,6 +2690,7 @@ static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
index e62ec80c328a4cc599aff2e115411c85df01f32f..010b6ab22cd9f6ab4ad1db384bbfb985caaeb411 100644 (file)
@@ -1432,6 +1432,7 @@ static void lts_ecs_fm0_n0_p4_ihires_dlores_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = 0;
@@ -1594,6 +1595,7 @@ static void lts_ecs_fm0_n1_p4_ihires_dlores_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = 0;
@@ -1760,6 +1762,7 @@ static void lts_ecs_fm0_dpf0_p4_ihires_dlores_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = 0;
@@ -1926,6 +1929,7 @@ static void lts_ecs_fm0_dpf1_p4_ihires_dlores_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                dtbuf[h][0] = dpix_val0;
                                dtgbuf[h][0] = gpix0;
                                uae_u32 t0 = 0;
@@ -2146,6 +2150,7 @@ static void lts_ecs_fm0_n0_p4_ihires_dlores_spr_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2343,6 +2348,7 @@ static void lts_ecs_fm0_n1_p4_ihires_dlores_spr_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2544,6 +2550,7 @@ static void lts_ecs_fm0_dpf0_p4_ihires_dlores_spr_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
@@ -2745,6 +2752,7 @@ static void lts_ecs_fm0_dpf1_p4_ihires_dlores_spr_ntsc_filtered_genlock(void)
                        internal_pixel_cnt += 2;
                        if (denise_pixtotal >= 0 && denise_pixtotal < denise_pixtotal_max) {
                                dpix_val0 = filter_pixel(dpix_val0, dpix_val1);
+                               gpix0 = filter_pixel_genlock(gpix0, gpix1);
                                if (sv0) {
                                        uae_u32 spix0 = denise_render_sprites2(pix0, sv0);
                                        if (spix0) {
index 3646ea2ca197bb7c5e5a00989cf4194feca45a61..325b4bc4a4ef144deb897023652cb761def75244 100644 (file)
@@ -6669,6 +6669,7 @@ void m68k_go (int may_quit)
                                m68k_setpc_normal(pc);
                                fill_prefetch();
                                update_68k_cycles();
+                               init_custom();
                        }
                        if (cpu_prefs_changed_flag & 2) {
                                fixup_cpu(&changed_prefs);