9 * S3 86C928 GUI Accelerator.
12 snarf(Vga* vga, Ctlr* ctlr)
14 s3generic.snarf(vga, ctlr);
18 options(Vga*, Ctlr* ctlr)
20 ctlr->flag |= Hlinear|Henhanced|Foptions;
24 init(Vga* vga, Ctlr* ctlr)
30 * s3generic.init() will perform the same test.
31 * We need to do it here too so that the Crt registers
32 * will be correct when s3generic.init() calculates
36 error("depth %d not supported\n", vga->mode->z);
39 if((ctlr->flag & Henhanced) && mode->x >= 1024 && mode->z == 8){
40 resyncinit(vga, ctlr, Uenhanced, 0);
41 vga->crt[0x00] = ((mode->ht/4)>>3)-5;
42 vga->crt[0x01] = ((mode->x/4)>>3)-1;
43 vga->crt[0x02] = ((mode->shb/4)>>3)-1;
46 vga->crt[0x03] = 0x80|(x & 0x1F);
47 vga->crt[0x04] = (mode->shs/4)>>3;
48 vga->crt[0x05] = ((mode->ehs/4)>>3) & 0x1F;
50 vga->crt[0x05] |= 0x80;
52 vga->crt[0x13] = mode->x/8;
56 s3generic.init(vga, ctlr);
57 vga->crt[0x3B] = (vga->crt[0]+vga->crt[4]+1)/2;
60 * Set up write-posting and read-ahead-cache.
62 vga->crt[0x54] = 0xA7;
63 if(ctlr->flag & Uenhanced){
64 vga->crt[0x58] |= 0x04;
65 vga->crt[0x40] |= 0x08;
68 vga->crt[0x58] &= ~0x04;
69 vga->crt[0x40] &= ~0x08;
73 * Set up parallel VRAM and the external
74 * SID enable on the 86C928
76 vga->crt[0x53] &= ~0x20; /* parallel VRAM */
77 vga->crt[0x55] &= ~0x48; /* external SID */
78 vga->crt[0x65] &= ~0x60; /* 2 86C928 E-step chip bugs */
79 if(ctlr->flag & Uenhanced){
80 if(vga->ramdac->flag & Hpvram)
81 vga->crt[0x53] |= 0x20;
82 if(vga->ramdac->flag & Hextsid)
83 vga->crt[0x55] |= 0x48;
84 vga->crt[0x65] |= 0x60;
89 load(Vga* vga, Ctlr* ctlr)
93 (*s3generic.load)(vga, ctlr);
94 vgaxo(Crtx, 0x65, vga->crt[0x65]);
97 if(ctlr->flag & Uenhanced){
98 if(vga->mode->x == 1024 || vga->mode->x == 800)
103 outportw(0x4AE8, advfunc);
107 dump(Vga* vga, Ctlr* ctlr)
109 (*s3generic.dump)(vga, ctlr);
115 options, /* options */