}
}
if (!ad->picasso_on) {
- if (ad->interlace_on) {
+ if (ad->interlace_on && currprefs.gf[GF_INTERLACE].enable) {
ad->gf_index = GF_INTERLACE;
} else {
ad->gf_index = GF_NORMAL;
int cslen = 10;
draw_denise_line_queue(dvp, nextline_how, rga_denise_cycle_line, rga_denise_cycle_start, rga_denise_cycle, rga_denise_cycle_count,
display_hstart_cyclewait_skip, display_hstart_cyclewait_skip2,
- wclks, cs, cslen, lol, l);
+ wclks, cs, cslen, lof_store, lol, l);
}
static void dmal_fast(void)
int dtotal;
int calib_start;
int calib_len;
- bool lol;
+ bool lol, lof;
uae_u16 strobe;
int strobe_pos;
struct linestate *ls;
if (rd->rga == 0x03c && previous_strobe != 0x03c) {
linear_denise_vbstrt = this_line->linear_vpos;
if (denise_vblank_extra) {
- denise_vblank_extra_vbstrt = this_line->linear_vpos + denise_vblank_extra;
+ int lof = this_line->lof;
+ denise_vblank_extra_vbstrt = this_line->linear_vpos + denise_vblank_extra + lof;
}
} else if (rd->rga != 0x03c && previous_strobe == 0x03c) {
linear_denise_vbstop = this_line->linear_vpos;
if (denise_vblank_extra) {
- denise_vblank_extra_vbstop = this_line->linear_vpos - denise_vblank_extra;
+ int lof = this_line->lof;
+ denise_vblank_extra_vbstop = this_line->linear_vpos - denise_vblank_extra + lof;
}
denise_visible_lines = 0;
}
if (h) {
denise_hcounter_next = denise_hcounter_new;
}
- checkhorizontal1_aga(denise_hcounter << 2, denise_hcounter_next << 2, h);
+ checkhorizontal1_aga(denise_hcounter, denise_hcounter_next, h);
flush_null();
#ifdef DEBUGGER
*debug_dma_dhpos_odd = denise_hcounter;
return;
}
+ if ((this_line->linear_vpos >= denise_vblank_extra_vbstop || this_line->linear_vpos < denise_vblank_extra_vbstrt) && currprefs.gfx_overscanmode < OVERSCANMODE_ULTRA) {
+ return;
+ }
+
uae_u32 *buf1p = buf1;
uae_u32 *buf2p = buf2 != buf1 ? buf2 : NULL;
int planecnt = GET_PLANES(ls->bplcon0);
{
this_line = &temp_line;
this_line->vpos = vpos;
+ this_line->lof = lof_store;
this_line->linear_vpos = linear_vpos;
}
}
}
-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 lol, 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, struct linestate *ls)
{
if (MULTITHREADED_DENISE) {
q->dtotal = dtotal;
q->calib_start = calib_start;
q->calib_len = calib_len;
+ q->lof = lof;
q->lol = lol;
q->ls = ls;
q->vpos = vpos;
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, 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 lol, 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, 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);
void draw_denise_border_line_fast(int gfx_ypos, enum nln_how how, struct linestate *ls);