int armed;
int dmastate;
int dmacycle;
- int ptxhpos;
int ptxhpos2, ptxvpos2;
bool ignoreverticaluntilnextline;
int width;
static void SPRxPTL(int hpos, uae_u16 v, int num)
{
decide_sprites(hpos);
- if (hpos != spr[num].ptxhpos || (!copper_access && !currprefs.cpu_memory_cycle_exact)) {
+ if (get_sprite_dma_rel(-2) != num || (!copper_access && !currprefs.cpu_memory_cycle_exact)) {
spr[num].pt &= ~0xffff;
spr[num].pt |= v & ~1;
}
bprun = -1;
if (plfstrt_sprite > hpos) {
plfstrt_sprite = hpos;
+ plfstrt_sprite--;
}
}
{
if (cop_state.state != COP_bltwait)
return;
- cop_state.state = COP_wait;
+ cop_state.state = COP_wait1;
compute_spcflag_copper();
if (copper_enabled_thisline) {
int hpos = current_hpos();
int num = s - &spr[0];
write_log(_T("Sprite %d, hpos %d wrong cycle polarity!\n"), num, hpos);
}
-
- s->ptxhpos = hpos;
#ifdef DEBUGGER
int num = s - &spr[0];
if (debug_dma) {
bool slot = (dat & 8) != 0;
bool dmastate = (dat & 0x10) != 0;
- spr[num].ptxhpos = MAXHPOS;
sprite_fetch_full(s, hpos, slot, false, &data, &data321, &data322);
int sprxp = s->xpos >> (sprite_buffer_res + 1);
bool start_before_dma = hpos >= sprxp && sprxp >= 16;
int hpos = last_decide_sprite_hpos;
while (hpos < endhpos) {
if (hpos >= SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH && hpos < SPR_FIRST_HPOS + MAX_SPRITES * 4) {
+
int rpos = (rga_pipeline_sprite - RGA_SPRITE_PIPELINE_DEPTH) & RGA_PIPELINE_MASK;
bool sprite_dma = rga_pipeline[rpos] >= 0x40 && rga_pipeline[rpos] <= 0x5f;
if (sprite_dma) {
do_sprite_fetch(hpos, dat);
rga_pipeline[rpos] = 0;
}
+
if (hpos < SPR_FIRST_HPOS + MAX_SPRITES * 4 - RGA_SPRITE_PIPELINE_DEPTH) {
int num = (hpos - (SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH)) / 4;
int slot = (hpos - (SPR_FIRST_HPOS - RGA_SPRITE_PIPELINE_DEPTH)) & 3;
s->dmacycle = 1;
}
}
- if (dmaen(DMA_SPRITE) && hpos < plfstrt_sprite && s->dmacycle) {
+ if (dmaen(DMA_SPRITE) && hpos <= plfstrt_sprite && s->dmacycle) {
bool dodma = true;
#ifdef AGA
if (s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) {
autoscale_bordercolors = 0;
for (i = 0; i < MAX_SPRITES; i++) {
- spr[i].ptxhpos = MAXHPOS;
spr[i].ptxvpos2 = -1;
}
}