Add DPMS support to S3 chips

This commit is contained in:
RichardG867
2021-04-13 15:21:55 -03:00
parent 80b1340454
commit 94eae848a3
2 changed files with 28 additions and 0 deletions

View File

@@ -2172,6 +2172,16 @@ s3_out(uint16_t addr, uint8_t val, void *p)
} else if (svga->seqaddr == 0xa) { } else if (svga->seqaddr == 0xa) {
svga->seqregs[svga->seqaddr] = val & 0x80; svga->seqregs[svga->seqaddr] = val & 0x80;
return; return;
} else if (s3->chip >= S3_VISION964) {
if (svga->seqaddr == 0x08) {
svga->seqregs[svga->seqaddr] = val & 0x0f;
return;
} else if ((svga->seqaddr == 0x0d) && (svga->seqregs[0x08] == 0x06)) {
svga->seqregs[svga->seqaddr] = val;
svga->dpms = ((s3->chip >= S3_VISION964) && (svga->seqregs[0x0d] & 0xf0)) || (svga->crtc[0x56] & ((s3->chip >= S3_TRIO32) ? 0x06 : 0x20));
svga_recalctimings(svga);
return;
}
} }
break; break;
@@ -2376,6 +2386,11 @@ s3_out(uint16_t addr, uint8_t val, void *p)
} }
break; break;
case 0x56:
svga->dpms = ((s3->chip >= S3_VISION964) && (svga->seqregs[0x0d] & 0xf0)) || (svga->crtc[0x56] & ((s3->chip >= S3_TRIO32) ? 0x06 : 0x20));
old = ~val; /* force recalc */
break;
case 0x67: case 0x67:
if (s3->chip >= S3_TRIO32) { if (s3->chip >= S3_TRIO32) {
switch (val >> 4) switch (val >> 4)

View File

@@ -428,6 +428,14 @@ static void s3_virge_out(uint16_t addr, uint8_t val, void *p)
svga->write_bank = svga->read_bank = virge->bank << 16; svga->write_bank = svga->read_bank = virge->bank << 16;
else else
svga->write_bank = svga->read_bank = virge->bank << 14; svga->write_bank = svga->read_bank = virge->bank << 14;
} else if (svga->seqaddr == 0x08) {
svga->seqregs[svga->seqaddr] = val & 0x0f;
return;
} else if ((svga->seqaddr == 0x0d) && (svga->seqregs[0x08] == 0x06)) {
svga->seqregs[svga->seqaddr] = val;
svga->dpms = (svga->seqregs[0x0d] & 0xf0) || (svga->crtc[0x56] & 0x06);
svga_recalctimings(svga);
return;
} }
break; break;
@@ -544,6 +552,11 @@ static void s3_virge_out(uint16_t addr, uint8_t val, void *p)
s3_virge_updatemapping(virge); s3_virge_updatemapping(virge);
break; break;
case 0x56:
svga->dpms = (svga->seqregs[0x0d] & 0xf0) || (svga->crtc[0x56] & 0x06);
old = ~val; /* force recalc */
break;
case 0x67: case 0x67:
switch (val >> 4) switch (val >> 4)
{ {