return brdblank;
}
+
+static bool brdspractive(void)
+{
+ return (bplcon3 & 2) && (bplcon0 & 1);
+}
+
static bool issprbrd (int hpos, uae_u16 bplcon0, uae_u16 bplcon3)
{
bool brdsprt;
#ifdef AGA
- brdsprt = (currprefs.chipset_mask & CSMASK_AGA) && (bplcon0 & 1) && (bplcon3 & 0x02);
+ brdsprt = (currprefs.chipset_mask & CSMASK_AGA) && brdspractive();
#else
brdsprt = false;
#endif
unsigned int col = 0;
unsigned coltmp = 0;
- if ((sprxp >= sprite_minx && sprxp < sprite_maxx) || (bplcon3 & 2))
+ if ((sprxp >= sprite_minx && sprxp < sprite_maxx) || brdspractive())
col = (datab & 3) << (2 * num);
#if 0
if (sprxp == sprite_minx || sprxp == sprite_maxx - 1)
}
}
-static void decide_sprites(int spnr, int hpos, bool usepointx, bool quick)
+static void decide_sprites(int hpos, bool usepointx, bool quick)
{
int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2];
int count, i;
int point;
int sscanmask = 0x100 << sprite_buffer_res;
int gotdata = 0;
- int startnr = 0, endnr = MAX_SPRITES - 1;
- if (thisline_decision.plfleft < 0 && !(bplcon3 & 2))
+ if (thisline_decision.plfleft < 0 && !brdspractive() && !quick)
return;
// let sprite shift register empty completely
if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point)
return;
- if (spnr >= 0) {
- startnr = spnr;
- endnr = spnr;
- }
if (!quick) {
decide_diw (hpos);
decide_line (hpos);
}
count = 0;
- for (i = startnr; i <= endnr; i++) {
+ for (i = 0; i < MAX_SPRITES; i++) {
struct sprite *s = &spr[i];
int xpos = spr[i].xpos;
int sprxp = (fmode & 0x8000) ? (xpos & ~sscanmask) : xpos;
record_sprite (next_lineno, nr, posns[i], s->data, s->datb, s->ctl);
/* get left and right sprite edge if brdsprt enabled */
#if AUTOSCALE_SPRITES
- if (dmaen (DMA_SPRITE) && (bplcon0 & 1) && (bplcon3 & 0x02) && !(bplcon3 & 0x20) && nr > 0) {
+ if (dmaen (DMA_SPRITE) && brdspractive() && !(bplcon3 & 0x20) && nr > 0) {
int j, jj;
for (j = 0, jj = 0; j < sprite_width; j+= 16, jj++) {
int nx = fromspritexdiw (posns[i] + j);
}
#endif
}
-static void decide_sprites(int spnr, int hpos)
+static void decide_sprites(int hpos)
{
- decide_sprites(spnr, hpos, false, false);
+ decide_sprites(hpos, false, false);
}
static void maybe_decide_sprites(int spnr, int hpos)
{
return;
if (!s->data && !s->datb)
return;
- decide_sprites(spnr, hpos, true, true);
+ decide_sprites(hpos, true, true);
}
static int sprites_differ (struct draw_info *dip, struct draw_info *dip_old)
if (thisline_decision.plfleft >= 0 && thisline_decision.nr_planes > 0)
record_diw_line (thisline_decision.plfleft, diwfirstword, diwlastword);
- decide_sprites(-1, hpos + 1);
+ decide_sprites(hpos + 1);
dip->last_sprite_entry = next_sprite_entry;
dip->last_color_change = next_color_change;
if (p96refresh_active > 0) {
new_beamcon0 |= 0x80;
}
+ varsync_changed = true;
}
#endif
#ifdef ECS_DENISE
if (currprefs.chipset_mask & CSMASK_ECS_DENISE) {
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
sprres = expand_sprres (v, bplcon3);
}
#endif
if (bplcon3 == v)
return;
decide_line (hpos);
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
bplcon3 = v;
sprres = expand_sprres (bplcon0, bplcon3);
record_register_change (hpos, 0x106, v);
static void SPRxDATA (int hpos, uae_u16 v, int num)
{
struct sprite *s = &spr[num];
- decide_sprites(-1, hpos, true, false);
+ decide_sprites(hpos, true, false);
SPRxDATA_1(v, num, hpos);
// if 32 (16-bit double CAS only) or 64 pixel wide sprite and SPRxDATx write:
// - first 16 pixel part: previous chipset bus data
static void SPRxDATB (int hpos, uae_u16 v, int num)
{
struct sprite *s = &spr[num];
- decide_sprites(-1, hpos, true, false);
+ decide_sprites(hpos, true, false);
SPRxDATB_1(v, num, hpos);
// See above
if (fmode & 8) {
}
#endif
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
SPRxCTL_1(v, num, hpos);
}
static void SPRxPOS (int hpos, uae_u16 v, int num)
write_log(_T("%d:%d:SPR%dPOSC %06X\n"), vpos, hpos, num, s->pt);
}
#endif
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
oldvpos = s->vstart;
SPRxPOS_1(v, num, hpos);
// Superfrog flashing intro bees fix.
static void SPRxPTH (int hpos, uae_u16 v, int num)
{
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
if (hpos - 1 != spr[num].ptxhpos) {
spr[num].pt &= 0xffff;
spr[num].pt |= (uae_u32)v << 16;
}
static void SPRxPTL (int hpos, uae_u16 v, int num)
{
- decide_sprites(-1, hpos);
+ decide_sprites(hpos);
if (hpos - 1 != spr[num].ptxhpos) {
spr[num].pt &= ~0xffff;
spr[num].pt |= v & ~1;