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;
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;
}
}
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);
}
}
}
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;
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;
static void setmaxhpos(void)
{
maxhpos = maxhpos_short + lol;
+ maxhpos_lol = lol;
maxhpos_long = linetoggle ? maxhpos_short + 1 : -1;
maxhposm0 = maxhpos;
maxhposm1 = maxhpos - 1;
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();
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) {
maxhpos = ntsc ? MAXHPOS_NTSC : MAXHPOS_PAL;
maxhpos_short = maxhpos;
+ maxhpos_lol = lol;
updateextblk();
bplcon0_saved = bplcon0;
// 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);
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);
{
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;
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) {
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)) {
}
}
#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);
if (!custom_disabled) {
eventtab[ev_sync].active = 0;
write_log("Chipset emulation active\n");
+ rga_denise_cycle_line++;
return;
}
int strobe_pos;
int erase;
struct linestate *ls;
+ uae_u16 reg, val;
};
static volatile uae_atomic rga_queue_read, rga_queue_write;
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;
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++) {
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;
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();
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
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)
{
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;
}
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;
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) {
}
vbout->last_drawn_line = 0;
+ vbout->hardwiredpositioning = false;
+
draw_frame_extras(vbin, -1, -1);
#ifdef WITH_SPECIALMONITORS
update_fmode();
update_specials();
update_sprres();
- if ((old & 1) != (bplcon0_denise)) {
+ if ((old & 1) != (bplcon0_denise & 1)) {
update_ecs_features();
update_genlock();
}
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;
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;
}
}
-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;
}
}
-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;
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;
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;
}
}
+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;
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
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;
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;
+ }
}
}
}
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);
+ }
}
}
}
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]++;
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];
+ }
}
}
}
}
-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;
}
}
}
}
+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) {
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;
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) {
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) {
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;
}
}
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;
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) {
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)
}
}
+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) {
}
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);
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]) {
} 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;");
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);
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");
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);
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);
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 */
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];
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];
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];
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
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];
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];
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];
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
}
}
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
}
}
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) {
}
}
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];
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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) {
}
}
static LINETOSRC_FUNC linetoscr_ecs_shres_funcs[] = {
+ lts_ecs_shres_dhires,
lts_ecs_shres_dhires,
lts_ecs_shres_dshres,
NULL
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) {
}
}
static LINETOSRC_FUNC linetoscr_ecs_shres_genlock_funcs[] = {
+ lts_ecs_shres_dhires_genlock,
lts_ecs_shres_dhires_genlock,
lts_ecs_shres_dshres_genlock,
NULL
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;
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;
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;
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;
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) {
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) {
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) {
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) {
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;
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;
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;
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;
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) {
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) {
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) {
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) {
m68k_setpc_normal(pc);
fill_prefetch();
update_68k_cycles();
+ init_custom();
}
if (cpu_prefs_changed_flag & 2) {
fixup_cpu(&changed_prefs);