Mercurial > repos > blastem
diff vdp.c @ 499:27345a67225d
Merge
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 29 Oct 2013 00:03:11 -0700 |
parents | 32f053ad9b02 8ac0eb05642c |
children | eee6be465c47 |
line wrap: on
line diff
--- a/vdp.c Mon Oct 28 23:59:59 2013 -0700 +++ b/vdp.c Tue Oct 29 00:03:11 2013 -0700 @@ -159,10 +159,16 @@ context->cur_slot--; for (uint16_t address = d->address; address != ((d->address+4) & 0xFFFF); address++) { if (x >= 0 && x < 320 && !(context->linebuf[x] & 0xF)) { + if (context->linebuf[x] && (context->vdpmem[address] >> 4)) { + context->flags2 |= FLAG2_SPRITE_COLLIDE; + } context->linebuf[x] = (context->vdpmem[address] >> 4) | d->pal_priority; } x += dir; if (x >= 0 && x < 320 && !(context->linebuf[x] & 0xF)) { + if (context->linebuf[x] && (context->vdpmem[address] & 0xF)) { + context->flags2 |= FLAG2_SPRITE_COLLIDE; + } context->linebuf[x] = (context->vdpmem[address] & 0xF) | d->pal_priority; } x += dir; @@ -1542,6 +1548,14 @@ if (context->flags2 & FLAG2_VINT_PENDING) { value |= 0x80; } + if (context->flags & FLAG_DOT_OFLOW) { + value |= 0x40; + } + if (context->flags2 & FLAG2_SPRITE_COLLIDE) { + value |= 0x20; + //TODO: Test when this is actually cleared + context->flags2 &= ~FLAG2_SPRITE_COLLIDE; + } if ((context->regs[REG_MODE_4] & BIT_INTERLACE) && context->framebuf == context->oddbuf) { value |= 0x10; } @@ -1560,7 +1574,6 @@ value |= 0x1; } //printf("status read at cycle %d returned %X\n", context->cycles, value); - //TODO: Sprite overflow, sprite collision, odd frame flag return value; }