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:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user