static int scanlinecount;
static int cia_hsync;
static bool toscr_scanline_complex_bplcon1;
-static bool spr_width_64_seen;
#define LOF_TOGGLES_NEEDED 3
//#define NLACE_CNT_NEEDED 50
stbfm[7] |= state;
stbfm += 8;
}
- spr_width_64_seen = true;
}
}
if (prev_sprite_entries) {
int first_pixel = prev_sprite_entries[0].first_pixel;
int npixels = prev_sprite_entries[prev_next_sprite_entry].first_pixel - first_pixel;
- memset (spixels + first_pixel, 0, npixels * sizeof *spixels);
+ memset(spixels + first_pixel, 0, npixels * sizeof *spixels);
memset(spixstate.stb + first_pixel, 0, npixels * sizeof *spixstate.stb);
- if (spr_width_64_seen) {
+ if (currprefs.chipset_mask & CSMASK_AGA) {
memset(spixstate.stbfm + first_pixel, 0, npixels * sizeof *spixstate.stbfm);
- spr_width_64_seen = false;
}
}
prev_next_sprite_entry = next_sprite_entry;
static uae_u8 ecs_genlock_features_mask;
static bool ecs_genlock_features_colorkey;
static int hsync_shift_hack;
-static bool sprite_smaller_than_64;
+static bool sprite_smaller_than_64, sprite_smaller_than_64_inuse;
uae_sem_t gui_sem;
// If 64 pixel wide sprite and FMODE gets lowered when sprite's
// first 32 pixels are being drawn: matching pixel(s) in second
// 32 pixel part gets blanked.
- if (aga && spb->stfmdata && sprite_smaller_than_64) {
+ if (aga && spb->stfmdata && sprite_smaller_than_64_inuse && sprite_smaller_than_64) {
spb[32 << currprefs.gfx_resolution].data &= ~spb->stfmdata;
}
bpldelay_sh = sh;
pfield_mode_changed = true;
}
+ if (sprite_smaller_than_64 && (dp_for_drawing->fmode & 0x0c) == 0x0c)
+ sprite_smaller_than_64_inuse = true;
sprite_smaller_than_64 = (dp_for_drawing->fmode & 0x0c) != 0x0c;
#endif
ecs_genlock_features_active = (currprefs.chipset_mask & CSMASK_ECS_DENISE) && ((dp_for_drawing->bplcon2 & 0x0c00) || ce_is_borderntrans(colors_for_drawing.extra)) ? 1 : 0;
}
have_color_changes = is_color_changes(dip_for_drawing);
+ sprite_smaller_than_64_inuse = false;
dh = dh_line;
xlinebuffer = vidinfo->drawbuffer.linemem;