Fixed dirty screen updating in high resolution modes.

This commit is contained in:
TomW 2014-03-22 19:10:00 +00:00
commit 0a1c4dcdf0
9 changed files with 48 additions and 48 deletions

View file

@ -633,17 +633,17 @@ void mach64_start_line(mach64_t *mach64)
#define WRITE(addr, width) if (width == 0) \
{ \
svga->vram[(addr) & 0x7fffff] = dest_dat; \
svga->changedvram[((addr) & 0x7fffff) >> 10] = changeframecount; \
svga->changedvram[((addr) & 0x7fffff) >> 12] = changeframecount; \
} \
else if (width == 1) \
{ \
*(uint16_t *)&svga->vram[((addr) << 1) & 0x7fffff] = dest_dat; \
svga->changedvram[(((addr) << 1) & 0x7fffff) >> 10] = changeframecount; \
svga->changedvram[(((addr) << 1) & 0x7fffff) >> 12] = changeframecount; \
} \
else \
{ \
*(uint32_t *)&svga->vram[((addr) << 2) & 0x7fffff] = dest_dat; \
svga->changedvram[(((addr) << 2) & 0x7fffff) >> 10] = changeframecount; \
svga->changedvram[(((addr) << 2) & 0x7fffff) >> 12] = changeframecount; \
}
void mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)

View file

@ -351,14 +351,14 @@ void gd5429_write_linear(uint32_t addr, uint8_t val, void *p)
if (addr >= svga->vram_limit)
return;
// if (svga_output) pclog("%08X\n", addr);
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
switch (svga->writemode)
{
case 4:
pclog("Writemode 4 : %X ", addr);
addr <<= 1;
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
pclog("%X %X\n", addr, val);
if (val & 0x80)
svga->vram[addr + 0] = svga->gdcreg[1];
@ -381,7 +381,7 @@ void gd5429_write_linear(uint32_t addr, uint8_t val, void *p)
case 5:
pclog("Writemode 5 : %X ", addr);
addr <<= 1;
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
pclog("%X %X\n", addr, val);
svga->vram[addr + 0] = (val & 0x80) ? svga->gdcreg[1] : svga->gdcreg[0];
svga->vram[addr + 1] = (val & 0x40) ? svga->gdcreg[1] : svga->gdcreg[0];
@ -618,7 +618,7 @@ void gd5429_start_blit(uint32_t cpu_dat, int count, void *p)
count--;
}
dst = svga->vram[gd5429->blt.dst_addr & svga->vrammask];
svga->changedvram[(gd5429->blt.dst_addr & svga->vrammask) >> 10] = changeframecount;
svga->changedvram[(gd5429->blt.dst_addr & svga->vrammask) >> 12] = changeframecount;
pclog("Blit %i,%i %06X %06X %06X %02X %02X %02X %02X ", gd5429->blt.width, gd5429->blt.height_internal, gd5429->blt.src_addr, gd5429->blt.dst_addr, gd5429->blt.src_addr & svga->vrammask, svga->vram[gd5429->blt.src_addr & svga->vrammask], 0x80 >> (gd5429->blt.dst_addr & 7), src, dst);
switch (gd5429->blt.rop)

View file

@ -371,7 +371,7 @@ void et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p)
else
{
svga->vram[(addr & 0x1fff) + et4000->mmu.base[bank]] = val;
svga->changedvram[((addr & 0x1fff) + et4000->mmu.base[bank]) >> 10] = changeframecount;
svga->changedvram[((addr & 0x1fff) + et4000->mmu.base[bank]) >> 12] = changeframecount;
}
break;
case 0x6000:
@ -705,7 +705,7 @@ void et4000w32_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et400
if (!(et4000->acl.internal.ctrl_routing & 0x40))
{
svga->vram[et4000->acl.dest_addr & 0x1fffff] = out;
svga->changedvram[(et4000->acl.dest_addr & 0x1fffff) >> 10] = changeframecount;
svga->changedvram[(et4000->acl.dest_addr & 0x1fffff) >> 12] = changeframecount;
}
else
{
@ -826,7 +826,7 @@ void et4000w32_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et400
if (!(et4000->acl.internal.ctrl_routing & 0x40))
{
svga->vram[et4000->acl.dest_addr & 0x1fffff] = out;
svga->changedvram[(et4000->acl.dest_addr & 0x1fffff) >> 10] = changeframecount;
svga->changedvram[(et4000->acl.dest_addr & 0x1fffff) >> 12] = changeframecount;
}
else
{

View file

@ -98,7 +98,7 @@ void et4000w32_mmu_write(uint32_t addr, uint8_t val)
else
{
vram[(addr&0x1FFF)+mmu.base[bank]]=val;
changedvram[((addr&0x1FFF)+mmu.base[bank])>>10]=changeframecount;
changedvram[((addr&0x1FFF)+mmu.base[bank])>>12]=changeframecount;
}
break;
case 0x6000:
@ -302,7 +302,7 @@ void et4000w32_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input)
}
pclog("%06X = %02X\n",acl.dest_addr&0x1FFFFF,out);
vram[acl.dest_addr&0x1FFFFF]=out;
changedvram[(acl.dest_addr&0x1FFFFF)>>10]=changeframecount;
changedvram[(acl.dest_addr&0x1FFFFF)>>12]=changeframecount;
acl.pattern_x++;
acl.pattern_x&=et4000w32_wrap_x[acl.internal.pattern_wrap&7];
@ -378,7 +378,7 @@ void et4000w32_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input)
if (acl.internal.rop_bg&(1<<d)) out|=(1<<c);
}
vram[acl.dest_addr&0x1FFFFF]=out;
changedvram[(acl.dest_addr&0x1FFFFF)>>10]=changeframecount;
changedvram[(acl.dest_addr&0x1FFFFF)>>12]=changeframecount;
pattern_x++;
pattern_x&=et4000w32_wrap_x[acl.internal.pattern_wrap&7];

View file

@ -1048,17 +1048,17 @@ uint8_t s3_accel_read(uint32_t addr, void *p)
#define WRITE(addr) if (s3->bpp == 0) \
{ \
svga->vram[(addr) & 0x3fffff] = dest_dat; \
svga->changedvram[((addr) & 0x3fffff) >> 10] = changeframecount; \
svga->changedvram[((addr) & 0x3fffff) >> 12] = changeframecount; \
} \
else if (s3->bpp == 1) \
{ \
vram_w[(addr) & 0x1fffff] = dest_dat; \
svga->changedvram[((addr) & 0x1fffff) >> 9] = changeframecount; \
svga->changedvram[((addr) & 0x1fffff) >> 11] = changeframecount; \
} \
else \
{ \
vram_l[(addr) & 0xfffff] = dest_dat; \
svga->changedvram[((addr) & 0xfffff) >> 8] = changeframecount; \
svga->changedvram[((addr) & 0xfffff) >> 10] = changeframecount; \
}
void s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, s3_t *s3)

View file

@ -989,16 +989,16 @@ static void s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *p)
{ \
case 0: /*8 bpp*/ \
vram[addr & 0x3fffff] = val; \
virge->svga.changedvram[(addr & 0x3fffff) >> 10] = changeframecount; \
virge->svga.changedvram[(addr & 0x3fffff) >> 12] = changeframecount; \
break; \
case 1: /*16 bpp*/ \
*(uint16_t *)&vram[addr & 0x3fffff] = val; \
virge->svga.changedvram[(addr & 0x3fffff) >> 10] = changeframecount; \
virge->svga.changedvram[(addr & 0x3fffff) >> 12] = changeframecount; \
break; \
case 2: /*24 bpp*/ \
*(uint32_t *)&vram[addr & 0x3fffff] = (val & 0xffffff) | \
(vram[(addr + 3) & 0x3fffff] << 24); \
virge->svga.changedvram[(addr & 0x3fffff) >> 10] = changeframecount; \
virge->svga.changedvram[(addr & 0x3fffff) >> 12] = changeframecount; \
break; \
} \
} while (0)

View file

@ -415,7 +415,7 @@ void svga_poll(void *p)
svga->firstline = svga->displine;
if (svga->hwcursor_on)
svga->changedvram[svga->ma >> 10] = svga->changedvram[(svga->ma >> 10) + 1] = 2;
svga->changedvram[svga->ma >> 12] = svga->changedvram[(svga->ma >> 12) + 1] = 2;
svga->render(svga);
@ -503,7 +503,7 @@ void svga_poll(void *p)
svga->fullchange = 2;
svga->blink++;
for (x = 0; x < (svga->vram_limit >> 10); x++)
for (x = 0; x < (svga->vram_limit >> 12); x++)
{
if (svga->changedvram[x])
svga->changedvram[x]--;
@ -634,7 +634,7 @@ int svga_init(svga_t *svga, void *p, int memsize,
svga->vram = malloc(memsize);
svga->vram_limit = memsize;
svga->vrammask = memsize - 1;
svga->changedvram = malloc(/*(memsize >> 10) << 1*/0x800000 >> 10);
svga->changedvram = malloc(/*(memsize >> 12) << 1*/0x800000 >> 12);
svga->recalctimings_ex = recalctimings_ex;
svga->video_in = video_in;
svga->video_out = video_out;
@ -687,7 +687,7 @@ void svga_write(uint32_t addr, uint8_t val, void *p)
return;
if (svga_output) pclog("%08X (%i, %i) %02X %i %i %i %02X\n", addr, addr & 1023, addr >> 10, val, writemask2, svga->writemode, svga->chain4, svga->gdcreg[8]);
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
switch (svga->writemode)
{
@ -913,7 +913,7 @@ void svga_write_linear(uint32_t addr, uint8_t val, void *p)
if (addr >= svga->vram_limit)
return;
if (svga_output) pclog("%08X\n", addr);
svga->changedvram[addr>>10]=changeframecount;
svga->changedvram[addr >> 12]=changeframecount;
switch (svga->writemode)
{
@ -1161,7 +1161,7 @@ void svga_writew(uint32_t addr, uint16_t val, void *p)
if (addr >= svga->vram_limit)
return;
if (svga_output) pclog("%08X (%i, %i) %04X\n", addr, addr & 1023, addr >> 10, val);
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
*(uint16_t *)&svga->vram[addr] = val;
}
@ -1190,7 +1190,7 @@ void svga_writel(uint32_t addr, uint32_t val, void *p)
return;
if (svga_output) pclog("%08X (%i, %i) %08X\n", addr, addr & 1023, addr >> 10, val);
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
*(uint32_t *)&svga->vram[addr] = val;
}
@ -1256,7 +1256,7 @@ void svga_writew_linear(uint32_t addr, uint16_t val, void *p)
addr &= 0x7FFFFF;
if (addr >= svga->vram_limit)
return;
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
*(uint16_t *)&svga->vram[addr] = val;
}
@ -1282,7 +1282,7 @@ void svga_writel_linear(uint32_t addr, uint32_t val, void *p)
addr &= 0x7fffff;
if (addr >= svga->vram_limit)
return;
svga->changedvram[addr >> 10] = changeframecount;
svga->changedvram[addr >> 12] = changeframecount;
*(uint32_t *)&svga->vram[addr] = val;
}

View file

@ -163,9 +163,9 @@ void svga_render_2bpp_lowres(svga_t *svga)
int changed_offset;
if (svga->sc & 1 && !(svga->crtc[0x17] & 1))
changed_offset = (svga->ma << 1) >> 10;
changed_offset = (svga->ma << 1) >> 12;
else
changed_offset = ((svga->ma << 1) + 0x8000) >> 10;
changed_offset = ((svga->ma << 1) + 0x8000) >> 12;
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
{
@ -213,9 +213,9 @@ void svga_render_2bpp_highres(svga_t *svga)
int changed_offset;
if (svga->sc & 1 && !(svga->crtc[0x17] & 1))
changed_offset = ((svga->ma << 1) | 0x8000) >> 10;
changed_offset = ((svga->ma << 1) | 0x8000) >> 12;
else
changed_offset = (svga->ma << 1) >> 10;
changed_offset = (svga->ma << 1) >> 12;
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
{
@ -260,7 +260,7 @@ void svga_render_2bpp_highres(svga_t *svga)
void svga_render_4bpp_lowres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = ((8 - svga->scrollcache) << 1) + 16;
@ -302,11 +302,11 @@ void svga_render_4bpp_highres(svga_t *svga)
int changed_offset;
if (svga->sc & 1 && !(svga->crtc[0x17] & 1))
changed_offset = (svga->ma | 0x8000) >> 10;
changed_offset = (svga->ma | 0x8000) >> 12;
else
changed_offset = svga->ma >> 10;
changed_offset = svga->ma >> 12;
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->changedvram[changed_offset + 2] || svga->fullchange)
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange)
{
int x;
int offset = (8 - svga->scrollcache) + 24;
@ -348,7 +348,7 @@ void svga_render_4bpp_highres(svga_t *svga)
void svga_render_8bpp_lowres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - (svga->scrollcache & 6)) + 24;
@ -376,7 +376,7 @@ void svga_render_8bpp_lowres(svga_t *svga)
void svga_render_8bpp_highres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
@ -410,7 +410,7 @@ void svga_render_8bpp_highres(svga_t *svga)
void svga_render_15bpp_lowres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - (svga->scrollcache & 6)) + 24;
@ -439,7 +439,7 @@ void svga_render_15bpp_lowres(svga_t *svga)
void svga_render_15bpp_highres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
@ -474,7 +474,7 @@ void svga_render_15bpp_highres(svga_t *svga)
void svga_render_16bpp_lowres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - (svga->scrollcache & 6)) + 24;
@ -503,7 +503,7 @@ void svga_render_16bpp_lowres(svga_t *svga)
void svga_render_16bpp_highres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
@ -541,7 +541,7 @@ void svga_render_24bpp_lowres(svga_t *svga)
int x, offset;
uint32_t fg;
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
if (svga->firstline_draw == 2000)
svga->firstline_draw = svga->displine;
@ -561,7 +561,7 @@ void svga_render_24bpp_lowres(svga_t *svga)
void svga_render_24bpp_highres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
int x;
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;
@ -596,7 +596,7 @@ void svga_render_32bpp_lowres(svga_t *svga)
int x, offset;
uint32_t fg;
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange)
{
if (svga->firstline_draw == 2000)
svga->firstline_draw = svga->displine;
@ -618,7 +618,7 @@ void svga_render_32bpp_lowres(svga_t *svga)
91%*/
void svga_render_32bpp_highres(svga_t *svga)
{
if (svga->changedvram[svga->ma >> 10] || svga->changedvram[(svga->ma >> 10) + 1] || svga->changedvram[(svga->ma >> 10) + 2] || svga->fullchange)
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange)
{
int x;
int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24;

View file

@ -552,12 +552,12 @@ enum
#define WRITE(addr, dat) if (tgui->accel.bpp == 0) \
{ \
svga->vram[addr & 0x1fffff] = dat; \
svga->changedvram[((addr) & 0x1fffff) >> 10] = changeframecount; \
svga->changedvram[((addr) & 0x1fffff) >> 12] = changeframecount; \
} \
else \
{ \
vram_w[addr & 0xfffff] = dat; \
svga->changedvram[((addr) & 0xfffff) >> 9] = changeframecount; \
svga->changedvram[((addr) & 0xfffff) >> 11] = changeframecount; \
}
void tgui_accel_write_fb_b(uint32_t addr, uint8_t val, void *priv);