S3 Trio/Vision changes (again x2):

Trio32/64 with on-chip ramdac instead of SDAC.
FIFO Empty/Full status from 9ae8/9ae9 no longer slowing down OS/2 when native drivers are installed.
This commit is contained in:
TC1995
2017-06-19 22:32:16 +02:00
parent 51ef58ad00
commit ca53dd0280

View File

@@ -86,6 +86,7 @@ typedef struct s3_t
int card;
uint32_t vram_mask;
uint8_t status_9ae8;
float (*getclock)(int clock, void *p);
void *getclock_p;
@@ -792,7 +793,12 @@ void s3_out(uint16_t addr, uint8_t val, void *p)
break;
case 0x3C6: case 0x3C7: case 0x3C8: case 0x3C9:
sdac_ramdac_out(addr, val, &s3->ramdac, svga);
if (s3->chip < S3_TRIO32)
{
sdac_ramdac_out(addr, val, &s3->ramdac, svga);
return;
}
svga_out(addr, val, svga);
return;
case 0x3D4:
@@ -930,7 +936,10 @@ uint8_t s3_in(uint16_t addr, void *p)
break;
case 0x3c6: case 0x3c7: case 0x3c8: case 0x3c9:
return sdac_ramdac_in(addr, &s3->ramdac, svga);
if (s3->chip < S3_TRIO32)
return sdac_ramdac_in(addr, &s3->ramdac, svga);
return svga_in(addr, svga);
case 0x3d4:
return svga->crtcreg;
@@ -1214,7 +1223,7 @@ uint8_t s3_accel_in(uint16_t port, void *p)
if (!FIFO_EMPTY)
temp |= 0x02; /*Hardware busy*/
else
temp |= 0x04; /*FIFO empty*/
temp |= s3->status_9ae8; /*FIFO empty*/
if (FIFO_FULL)
temp |= 0xf8; /*FIFO full*/
return temp;
@@ -1604,6 +1613,14 @@ void s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
frgd_mix = (s3->accel.frgd_mix >> 5) & 3;
bkgd_mix = (s3->accel.bkgd_mix >> 5) & 3;
s3->status_9ae8 = 4; /*To avoid the spam from OS/2's drivers*/
if ((s3->accel.cmd & 0x100) && !cpu_input)
{
s3->status_9ae8 = 2; /*To avoid the spam from OS/2's drivers*/
return; /*Wait for data from CPU*/
}
while (count-- && s3->accel.sy >= 0)
{
if (s3->accel.cx >= clip_l && s3->accel.cx <= clip_r &&
@@ -1688,7 +1705,8 @@ void s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
bkgd_mix = (s3->accel.bkgd_mix >> 5) & 3;
if (!cpu_input && frgd_mix == 3 && !vram_mask && !compare_mode &&
(s3->accel.cmd & 0xa0) == 0xa0 && (s3->accel.frgd_mix & 0xf) == 7)
(s3->accel.cmd & 0xa0) == 0xa0 && (s3->accel.frgd_mix & 0xf) == 7 &&
(s3->accel.bkgd_mix & 0xf) == 7)
{
while (1)
{