Trident SuperVGA
Trident 8800BR 512k Only 128K banks.
8800CS 512k Has 64k banks and old/new mode
8900B 1MB
8900C 1MB
8900CL 2MB
8900D 2MB Same as 8900CL, but with a few bug corrected
8900CXr
9200CXi
9000 Low component version 256K on chip
9000i Low component count. 15/16 bit DAC on chip
GUI9420
LCD9100B
LCD9100
LX8200
Support chips:
TCK9001 Clock chip for the 8900B.
Supplies: 25.175, 28.322, 44.9, 36, 57.272, 65, 50.35, 40 MHz
TCK9002 Clock chip for the 8900C and later.
Supplies: 25.175, 28.322, 44.9, 36, 57.272, 65, 50.35, 40,
88, 98, 118.8, 108 MHz
TCK9004 Clock chip for the 8900CL and later.
Supplies: 25.175, 28.322, 44.9, 36, 57.272, 65, 50.35, 40,
88, 98, 118.8, 108, 72, 77, 80, 75 MHz
What are the specs for all the new chips?? (CX,CXi,CL,CXr,GUI...)
The Trident 8800 chips have a problem with 256 color modes,
as they always double the pixels output in 256 color mode.
Thus a 640x400 256 color mode (5Ch) actually uses a 1280x400
frame, requiring at least a multi sync monitor.
This problem is fixed on the 8900.
Apparently Trident BIOS version 3.xx or later on a 8900C will support Sierra
HiColor DACs (SC11483 or SC11487). No check is made for the existence of such
a DAC, the mode is just set as if it was present, resulting in 1024x480,
1280x480 and 1600x600 256color modes if an ordinary DAC is installed.
100h (R/W?): Microchannel ID low
bit 0-7 Card ID bit 0-7
101h (R/W?): Microchannel ID high
bit 0-7 Card ID bit 8-15
3C3h (R/W): Microchannel Video Subsystem Enable Register:
bit 0 Enable Microchannel VGA if set
3C4h index Bh (R): Chip Version
bit 0-7 Chip ID
1 = TR 8800BR
2 = TR 8800CS
3 = TR 8900B
4 = TR 8900C
13h = TR 8900C
23h = TR 9000
33h = TR 8900CL or TVGA 8900D
43h = TVGA9000i
53h = TR 8900CXr
63h = TLCD9100B
73h = TR GUI9420
83h = TR LX8200
93h = TR 9200CXi
A3h = TLCD9320
F3h = TR GUI9420
Note: Writing to index Bh selects old mode registers.
Reading from index Bh selects new mode registers.
Note: Writing to this register in order to force old mode registers
should be done with two 8bit writes, not one 16bit write.
3C4h index Ch (R/W): Power Up Mode Register 1
bit 0 Fast Decode if set, Slow if clear
1 (9000 & LCD9100) If clear 0 Wait states,
if set bit 6 determines number of wait states.
4 If set enable post port at 3C3h, at 46E8h if clear
5 (8900C) If set enables access to upper 512KB in non-paged modes
Must be clear in text and CGA modes.
(9000 & LCD9100) If set uses 2 DRAMs, 4 if clear
6 (9000 & LCD9100) If bit 1 is clear this bit determines the number
of wait states. If set 2 Wait states, 1 if clear.
5-6 (88xx and 89xx) 0=256K chip, 1 = 2 DRAMs, 2 = 4 DRAMs, 3 = 8 DRAMs.
7 If set VRAM bus setting is 16, 8 if clear
Note: This register can only be changed if New Mode Control 1 (3C4h index 0Eh)
bit 7 is set
3C4h index Dh (R/W): Old Mode Control 2
bit 0-2 Emulation mode
0=VGA, 3=EGA, 5=CGA,MDA,Hercules
4 Enable Paging mode if set. If set the CRTC offset (3d4h index 13h)
should be multiplied by 2, and the Display Start Address (3d4h index
0Ch & 0Dh + 1Eh bit 5 and 3C4h Old Mode index 0Eh bit 0) is in units
of 8 bytes rather than 4 (256 color modes only).
5 DRAM clock enabled if set.
3C4h index Dh (R/W): New Mode Control 2 (not 8800BR)
bit 0 Clock Select bit 2. Bits 0-1 are in 3CCh bits 2-3.
Clock table:
0: 25.275 1: 28.322 2: 44.9 3: 36
4: 57.272 5: 65 6: 50.35 7: 40
8: 88 9: 98 10: 118.8 11: 108
12: 72 13: 77 14: 80 15: 75
For the 8800 and 8900B only the first 8 clocks are available.
1-2 Divide pixel clock by: 0=1, 1=2, 2=4, 3=1.5
6 (9xxx) Clock Select bit 3. See bit 0
Note: The old/new Mode Control 1/2 registers are selected by
reading and writing the Chip version register (index Bh).
3C4h index Eh (R/W): Old Mode Control 1
bit 0 (8900 Only) CRTC Address bit 17. Apparently this determines in which
part of memory the display is, as the display can not cross this
line, but can be on either side. Note that in Paged Mode (3C4h Old
Mode index 0Dh bit 4 is set) this bit has no effect as 17 bits can
span the entire 1MB range.
1-2 128kb Bank number (0-3)
3 16 bit video interface if set
4 (8900C, CL, CXr, GUI9420) Clock Select bit 3.
See New mode 3C4h index Dh bit 0.
3C4h index Eh (R/W): New Mode Control 1 (not 8800BR)
bit 0-3 64k Bank nbr. When writing to this field XOR with 02h, when reading
from this field no XOR is needed. This is used for Trident detection.
In planar modes bits 0 and 2 form a two bit field.
4-6 Reserved
7 Must be set to update index 0Ch ???
Note: The old/new Mode Control 1/2 registers are selected by
reading and writing the Chip version register (index Bh).
3C4h index Fh (R/W): Power-up Mode 2
bit 0-3 Switch settings
4 Bus type
5 If set I/O address are at 3xxh, else at 2xxh.
6 Enable ON-Card ROM if set
7 16 bit ROM access enabled if set
3d4h index 1Eh (R/W): Module Testing Register
bit 2 Vertical interlace if set
In interlaced modes the CRTC offset (3d4h index 13h) is the number of
bytes in TWO scanlines. Note that in interlaced modes the line doubling
caused by index 9 bits 0-4,7 is unlikely to work, as the (even,odd)
linepair is repeated rather than each individual line causing stripes.
3 If set Load fonts from Bottom, from top if clear
4 If set the display wraps back to line 0 when the line counter reaches
512.
5 CRTC starting address bit 16
7 (8900 Only) Host address bit 16. If clear bit 5 has no effect.
This does not affect 3C4h Old Mode index 0Eh bit 0.
3d4h index 1Fh (R/W): Software Programming Register (8900 Only)
bit 0-1 (8800, 8900, 9000) Memory size 0=256k, 1=512k, 2=768k, 3=1M.
0-2 (8900CL, 8900CXr, GUI9420) Memory size 0=256k, 1=512k, 2=768k,
3=1M, 4=256k, 5=512k, 6=768k, 7=2M.
3d4h index 1Fh (R/W): Scratch Register (8800 Only)
bit 0 Paged memory mode in effect
1 Memory size 0=256k, 1=512k
2 Analog monitor attached
3 44.9 MHz oscillator present
Note: This register is set by software.
3d4h index 22h (R): CPU Latch Read Back
bit 0-7 Data Latch value for current read plane.
3d4h index 24h (R): Attribute State Read Back
bit 0-6 Reserved
7 Attribute Controller State
If set the next write to 3C0h will go to the data
register, if clear to the index register.
3d4h index 26h (R): Attribute Index Read Back
bit 0-7 Attribute Index Register value
3d4h index 27h (R/W): (8900CL/D only)
bit 0-1 Display Start Address bit 17-18. Bit 16 is in index 1Eh bit 5.
3d4h index 29h (R/W): (8900CL/D only)
bit 0 Connected to the RS2 input on the DAC ?.
3D8h (R/W): (8900CL/D only)
bit 0-4 Bank number in 64k units. 3C4h index Eh appears still to work.
Note: on the 8900CL, 9000i, 8900CXr, GUI9420, TVGA9200CXi and TLCD9320
3d4h index 20h, 23h, 25h, 28h-2Ch appears to be used for an 8 byte FIFO?
46E8h (R): Video Subsystem Enable Register
bit 3 Enable VGA if set
Bank selection:
Trident VGAs (except 8800BR) can operate in 2 different modes:
Old Mode, with a 128k window to display memory at A000h - BFFFh
and New Mode, with a 64k window to display memory at A000h - AFFFh.
Old/New mode is selected by reading/writing the Chip Version Register
(3C4h index 0Bh).
Each mode has its own registers at 3C4h index 0Dh and 0Eh.
ID Trident VGA:
wrinx($3C4,$B,0); {Force old_mode_registers}
chp:=inp($3C5); {Read chip ID and switch to new_mode_registers}
old:=rdinx($3C4,$E);
outp($3C5,0);
value:=inp($3C5) and $F;
outp($3C5,old);
if value=2 then
begin
outp($3C5,old xor 2);
case chp of
1:Trident TR8800BR;
2:Trident TR8800CS;
3:Trident TR8900;
4,$13:Trident TR8900C;
$23:Trident TR9000;
$33:Trident TR8900CL or D;
$43:Trident TR9000i;
$53:Trident TR8900CXr
$63:Trident LCD9100B;
$83:Trident LX8200;
$93:Trident TVGA9200CXi
$A3:Trident LCD9320;
$73,$F3:Trident GUI9420;
end;
end
else if (chp=1) and testinx2($3C4,$E,6) then
Trident TVGA 8800BR {Haven't tested this yet}
Video Modes:
50h T 80 30 16 (8x16)
51h T 80 43 16 (8x11)
52h T 80 60 16 (8x8)
53h T 132 25 16 (8x14)
54h T 132 30 16 (8x16)
55h T 132 43 16 (8x11)
56h T 132 60 16 (8x8)
57h T 132 25 16 (9x14)
58h T 132 30 16 (9x16)
59h T 132 43 16 (9x11)
5Ah T 132 60 16 (9x8)
5Bh G 800 600 16 PL4
5Ch G 640 400 256 P8
5Dh G 640 480 256 P8
5Eh G 800 600 256 P8 (Undocumented on 8800)
5Fh G 1024 768 16 PL4
60h G 1024 768 4 8900 Only
61h G 768 1024 16 PL4
62h G 1024 768 256 P8 8900 Only
63h G 1280 1024 16 PL4 Which chip/BIOS rev ?
64h G 1280 1024 256 P8 8900CL only
6Ah G 800 600 16 PL4 Newer boards
6Bh G 320 200 16m P24 TVGA9000i
6Ch G 640 480 16m P24 8900CL only
6Dh G 800 600 16m P24 8900CL only
70h G 512 480 32K P15 89xx with Sierra DAC
71h G 512 480 64K P16 89xx with Sierra DAC
74h G 640 480 32K P15 89xx with Sierra DAC
75h G 640 480 64K P16 89xx with Sierra DAC
76h G 800 600 32K P15 89xx with Sierra DAC
77h G 800 600 64K P16 89xx with Sierra DAC
78h G 1024 768 32K P15 8900CL with Sierra DAC
79h G 1024 768 64K P16 8900CL with Sierra DAC
7Eh G 320 200 32K P15 TVGA9000i
7Fh G 320 200 64K P16 TVGA9000i
ZyMOS POACH51 modes:
60h G 960 720 16 PL4
61h G 1280 640 16 PL4
62h G 512 512 256 P8
63h G 720 540 16 PL4
64h G 720 540 256 P8
6Ah G 800 600 16 PL4
Everex Viewpoint use Everex modes.
Note: The TVGA9000i has an on-chip DAC with 32k/64k capability.
The BIOS on the card I have (BIOS version D3.51) doesn't
seem to handle the Hi/True color modes correctly.
I have managed to get the 320x200 32k/64k modes working by programming
the DAC command register directly, but the 512x480 modes and the 320x200
16m mode still doesn't work
Bios extensions:
----------1000-------------------------------
INT 10 - VIDEO - SET VIDEO MODE
AH = 00h
AL = mode number
Return: AH = Status of call: (Trident Super VGA Chips)
Trident 8800 Trident 8900
00h Successful do
80h Fail. Wrong switch do
81h Insufficient Video do
Memory.
82h The 36MHz crystal Mode not supported
cannot support the mode
83h The 40MHz crystal Mode not supported
cannot support the mode.
84h The 44.9MHz crystal Mode not supported
cannot support the mode.
85h Dead or no crystal
86h Wrong CRTC base for dual screen
87h Text mode not supported
----------1012-BL11------------------------------
INT 10 - VIDEO - Trident BIOS - GET BIOS INFO
AH = 12h
BL = 11h
Return: AL = 12h if function supported
ES:BP -> BIOS info structure:
Offset: Size: Description:
00h BYTE ??? (=0)
01h BYTE OEM Code (00h for original Trident)
02h WORD ID ?? (1073h for 8800BR, 1074h for 8800CS,
1090h for 8900C or 9000i
04h 8 BYTEs BIOS date ('mm/dd/yy')
0Ch WORD ???
0Eh 8 BYTEs BIOS Version (' C3-128 ', ' C3-129 ',
' D3.51 ').
----------1012-BL12------------------------------
INT 10 - VIDEO - Trident BIOS - GET VIDEO RAM SIZE
AH = 12h
BL = 12h
Return: AL = 12h if function supported
AH = number of 256K banks of RAM installed
----------101200-BL14----------------------------
INT 10 - VIDEO - Trident LOCKFIFO - Get FIFO state
AX = 1200h
BH = 14h
Return: CX = FIFO state
Note: Implemented by the LOCKFIFO.COM utility
----------101201-BL14----------------------------
INT 10 - VIDEO - Trident LOCKFIFO - Get FIFO state
AX = 1201h
BH = 14h
CX = FIFO state (0..FFh, FFh = disabled)
Note: Implemented by the LOCKFIFO.COM utility