vdp, fix for gfx save/load menu bg

This commit is contained in:
kub 2020-09-21 21:02:51 +02:00
parent 8e4ab3c62c
commit e721f80136
5 changed files with 29 additions and 15 deletions

View file

@ -999,6 +999,25 @@ unsigned char PicoVideoRead8HV_L(void)
return d;
}
void PicoVideoCacheSAT(void)
{
struct PicoVideo *pv = &Pico.video;
int l;
SATaddr = ((pv->reg[5]&0x7f) << 9) | ((pv->reg[6]&0x20) << 11);
SATmask = ~0x1ff;
if (pv->reg[12]&1)
SATaddr &= ~0x200, SATmask &= ~0x200; // H40, zero lowest SAT bit
// rebuild SAT cache XXX wrong since cache and memory can differ
for (l = 0; l < 80; l++) {
((u16 *)VdpSATCache)[l*2 ] = PicoMem.vram[(SATaddr>>1) + l*4 ];
((u16 *)VdpSATCache)[l*2 + 1] = PicoMem.vram[(SATaddr>>1) + l*4 + 1];
}
Pico.est.rendstatus |= PDRAW_SPRITES_MOVED;
}
void PicoVideoSave(void)
{
struct VdpFIFO *vf = &VdpFIFO;
@ -1014,7 +1033,6 @@ void PicoVideoLoad(void)
{
struct VdpFIFO *vf = &VdpFIFO;
struct PicoVideo *pv = &Pico.video;
int l;
// convert former dma_xfers (why was this in PicoMisc anyway?)
if (Pico.m.dma_xfers) {
@ -1023,17 +1041,6 @@ void PicoVideoLoad(void)
vf->fifo_total = Pico.m.dma_xfers;
Pico.m.dma_xfers = 0;
}
SATaddr = ((pv->reg[5]&0x7f) << 9) | ((pv->reg[6]&0x20) << 11);
SATmask = ~0x1ff;
if (pv->reg[12]&1)
SATaddr &= ~0x200, SATmask &= ~0x200; // H40, zero lowest SAT bit
// rebuild SAT cache XXX wrong since cache and memory can differ
for (l = 0; l < 80; l++) {
*((u16 *)VdpSATCache + 2*l ) = PicoMem.vram[(SATaddr>>1) + l*4 ];
*((u16 *)VdpSATCache + 2*l+1) = PicoMem.vram[(SATaddr>>1) + l*4 + 1];
}
PicoVideoCacheSAT();
}
// vim:shiftwidth=2:ts=2:expandtab