TSENG.TXT

    Tseng Super VGA

    ET3000-AX    512k 8/16 bit Main chip
          -BX    512k  8 bit
          -Bp    256k  8 bit  Basic chip
    ET4000       1M   8/16 bit
    ET4000/W32   4MB  Accelerator.
    ET4000/W32i  4MB  Accelerator. Can interleave DRAM
    ET4000/W32p  4MB  Accelerator, PCI support



    Registers:

102h: Microchannel Setup Control
bit 0  Disable Card if set

3BFh (R/W): Hercules Compatibility Mode
bit   1  Enable second page (B800h-BFFFh)

3C0h index 16h: ATC Miscellaneous
bit 4,5  High resolution timings.
          0: Normal powerup mode, 2: Hiresolution 256color mode
          3: 15/16 bit HiColor mode
      7  Ignore EGA internal palette

3C3h (R/W): Microchannel Video Subsystem Enable Register:
bit 0  Enable Microchannel VGA if set

3C4h index  6  (R/W): Zoom Control                               (ET3000 Only)
bit 0-2  Yzoom factor 0=1:1
    4-6  Xzoom factor 0=1:1
      7  Hardware zoom enabled if set

3C4h index  6  (R/W): TS State Control                            (not ET3000)
bit 1-2  Font Width Select: 0: 9, 1: 8, 2: 10, 3: 11, 4: 12, 7: 16
         Only valid if 3d4h index 34h bit 3 set.

3C4h index  7  (R/W): TS Auxiliary Mode
bit 0  (ET3000 Only) Switch Normal Window if set (Text/Graph)
       (not ET3000)  Selects MCLK/4 as video clock if set (bit 6 must be set)
    1  (ET3000 Only) Switch Zoom Window if set (Text/Graph)
       (not ET3000)  Selects SCLK=MCLK
    2  (ET3000 Only) Switch Split Window if set (Text/Graph)
       (not ET3000)  Always 1
    4  (ET3000 Only) If set 8 simultaneous fonts are enabled,
                     using bit 3,4,6 of each attribute byte
                     to select the font.
  3,5  ROM Bios Enable/Disable:
         0 0  C000-C3FF Enabled
         0 1  ROM disabled
         1 0  C000-C5FF,C680-C7FF Enabled
         1 1  C000-C7FF Enabled
    6  MCLK/2 if set (ET4000: bit 0 must be 0)
    7  VGA compatible if set EGA else.

3CBh (R/W): PEL Address/Data Wd                                  (3000/4000 ?)

3CBh (R/W): Extended bank register                                  (W32 only)
bit 0-1  Write bank bit 4-5. The lower 4 bits are in 3CDh bit 0-3.
    4-5  Read bank bit 4-5.  The lower 4 bits are in 3CDh bit 4-7.

3CDh (R/W): Segment Select
bit 0-2  (ET3000) 64k Write bank nbr
    3-5  (ET3000) 64k Read bank nbr
    6-7  (ET3000) Segment Configuration.
                    0  128K segments
                    1   64K segments
                    2  1M linear memory
    0-3  (ET4000) 64k Write bank nbr (0..15)
    4-7  (ET4000) 64k Read bank nbr (0..15)

3CEh index  Dh (R/W): Microsequencer Mode

3CEh index  Eh (R/W): Microsequencer Reset 

3d4h index 1Bh (R/W): X Zoom Start Address                       (ET3000 Only)
bit 0-7  Offset of Zoom window start in character clocks
         (8 pixels) from left edge

3d4h index 1Ch (R/W): X Zoom End                                 (ET3000 Only)
bit 0-7  Offset of Zoom window end in char clocks from left edge

3d4h index 1Dh (R/W): Y Zoom Start Address                       (ET3000 Only)
bit 0-7  Start line of zoom window bit 0-7

3d4h index 1Eh (R/W): Y Zoom End Address                         (ET3000 Only)
bit 0-7  (ET3000 Only) End line of zoom window bit 0-7

3d4h index 1Fh (R/W): Y Zoom Start and End High                  (ET3000 Only)
bit 0-2  End line of zoom window bit 8-10
    3-5  Start line of zoom window bit 8-10

3d4h index 20h (R/W): Zoom Start Address Low                     (ET3000 Only)
bit 0-7  Zoom Start Address bit 0-7. Address of Zoom data

3d4h index 21h (R/W): Zoom Start Address Middle                  (ET3000 Only)
bit 0-7  Zoom Start Address bit 8-15

3d4h index 23h (R/W): Extended start ET3000                      (ET3000 Only)
bit   0  Cursor start address bit 16
      1  Display start address bit 16
      2  Zoom start address bit 16

3d4h index 24h (R/W): Compatibility Control                      (ET3000 only)
bit   0  Enable Clock Translate
      1  Clock Select bit 2. Bits 0-1 are in 3C2h/3CCh.
      2  Enable tri-state for all output pins
      3  Enable input A8 of 1MB DRAMs
      4  Reserved
      5  Enable external ROM CRTC translation
      6  Enable Double Scan and Underline Attribute
      7  CGA/MDA/Hercules

3d4h index 25h (R/W): Overflow High ET3000                       (ET3000 Only)
bit   0  Vertical Blank Start bit 10
      1  Vertical Total Start bit 10
      2  Vertical Display End bit 10
      3  Vertical Sync Start bit 10
      4  Line Compare bit 10
    5-6  Reserved
      7  Vertical Interlace if set

3d4h index 30h (R/W):
bit 0-4  Exists on W32, but ET4000 ??

3d4h index 32h (R/W): RAS/CAS Video Config                        (not ET3000)
bit 0-4  Controls the Trsp, Tcsw, Tcsp timings
      5  Recharge time (Trcd)? <=50ns if clear
      7  (W32i/p) Set if using interleaved memory.
      Ram timing, System clock and Ram type. Sample values:
          00h  VRAM  80nsec
          09h  VRAM 100nsec
          00h  VRAM  28MHz
          08h  VRAM  36MHz
          70h  DRAM  40MHz

3d4h index 33h (R/W): Extended start ET4000                       (not ET3000)
bit 0-1  (4000) Display Start Address bits 16-17
    2-3  (4000) Cursor start address bits 16-17
         Can be used to ID ET4000
    0-3  (W32x) Display Start Address bits 16-19

3d4h index 34h (R/W): Compatibility Control Register
bit   0  Enable CS0 (alternate clock timing)
      1  Clock Select bit 2.  Bit 0-1 in 3C2h bits 2-3.
      2  Tristate ET4000 bus and color outputs
      3  Video Subsystem Enable Register at 46E8h if set, at 3C3h if clear.
      4  Enable Translation ROM for reading CRTC and MISCOUT
      5  Enable Translation ROM for writing CRTC and MISCOUT
      6  Enable double scan in AT&T compatibility mode
      7  Enable 6845 compatibility

3d4h index 35h (R/W): Overflow High ET4000                        (not ET3000)
bit   0  Vertical Blank Start Bit 10
      1  Vertical Total Bit 10
      2  Vertical Display End Bit 10
      3  Vertical Sync Start Bit 10
      4  Line Compare Bit 10
      5  Gen-Lock Enabled if set (External sync)
      6  Read/Modify/Write Enabled if set. Currently not implemented.
      7  Vertical interlace if set

3d4h index 36h (R/W): Video System Configuration 1                (not ET3000)
bit 0-2  Refresh count (-1)
      3  16 bit wide fonts if set, else 8 bit wide
      4  Linear addressing if set
         Video Memory is mapped as a 1 Meg block above 1MB.
      5  Enable Tseng Addressing Mode
      6  16 bit data path (video memory) if set
      7  16 bit data (I/O operations) if set

3d4h index 37h (R/W): Video System Configuration 2                (not ET3000)
bit 0-1  (4000) Bus width (VGA chip to video memory):
                  1 = 8 bit, 2 = 16 bit, 3 = 32 bit.
      0  (W32x) Bus Width 0: 16bit, 1: 32bit
      2  Bus Read Latch control (0: Delay one clock before latching)
      3  (4000) Size of RAM chips. 0: 64Kx, 1: 256Kx
         (W32x) Size of RAM chips. 0: 1Mx, 1: 256Kx
         RAM size is (Chip size 64k/256k/1M) * (Bus Width 1/2/4 bytes)
         For W32i/p multiply with 2 if interleaved.
      4  Disable Block Readahead (One source says: 16 bit ROM access if set)
      5  Memory bandwidth (0 better than 1) ???
      6  Enable test mode (One source says: Block read ahead (BRA)  if clear)
      7  VRAM installed if set DRAM if clear.

3d4h index 3Fh (R/W):                                             (not ET3000)
bit   7  This bit seems to be bit 8 of the CRTC offset register (3d4h index
         13h).

3d8h (R/W): Display Mode Control

217Ah index E0h W(R/W):  Cursor X-position                          (W32 only)
bit 0-15  The X position of the HardWare Cursor

217Ah index E2h (R/W):                                              (W32 only)
bit  0-7  The pixel number (from the right) within the cursor bitmap of the
          first used pixel.

217Ah index E4h W(R/W):  Cursor Y-position                          (W32 only)
bit 0-15  The Y position of the HardWare cursor

217Ah index E6h (R/W):                                              (W32 only)
bit  0-7  The pixel number (from the top) within the cursor bitmap of the
          first used pixel.

217Ah index E8 3(R/W):  Cursor Map Address                          (W32 only)
bit 0-23  The address in Video Memory of the start of the Cursor BitMap.
          In bytes in planar modes, and in DWORDs in packed modes.

217Ah index EBh (R/W):                                              (W32 only)
bit  0-7  Width of the Cursor Map: 2=16 bytes per line, 4=32 bytes

217Ah index ECh (R/?):                                              (W32 only)
bit  0-3  Mask revision ??
     4-7  Chip version. 0: W32, 3: W32i, 2,4: W32p ?

217Ah index EDh (R/W):                                              (W32 only)

217Ah index EEh (R/W):                                              (W32 only)
bit  0-7  1: Cursor data is loaded from every byte in the Cursor Map.
          2: Cursor data is only loaded from even bytes in the Cursor Map

217Ah index EFh (R/W):                                              (W32 only)

217Ah index F7h (R/W):                                              (W32 only)
bit    7  Set to enable the HardWare Cursor.

46E8h (R):  Video Subsystem Enable Register
bit   3  Enable VGA if set


       3C4h index 05 used.
 

  Bank Switching:

     64k banks are selected by the Segment Select Register at 3CDh.
     Both a Read and a Write segment can be selected.

  Hardware Zoom (ET3000 Only).

     The ET3000 can zoom a part of display memory in a window.
     The display memory position and window position are selected
     by 3d4h index 1Bh to 21h.


  Identify Tseng Chipset:

  outp($3BF,3);
  outp($3D8,$A0);   {Enable ET4000 extensions}
  if tstrg($3CD,$3F) then
    if testinx2(base,$33,$F) then
      if tstrg($3CB,$33) then
        case rdinx($217A,$EC) shr 4 of
          0:Tseng ET4000W32
          3:Tseng ET4000W32i
          2:Tseng ET4000W32p    {Not quite sure yet}
        end
      else Tseng 4000
    else Tseng 3000;

Memory:     (Tseng BIOS version 3.00 and up)
0:488h  BYTE  Bit 4  High bit of the 1024x768 mode flag
                      0: 87Hz interlaced, 1: 60Hz, 2: 72Hz, 3: 70Hz
                  5  High bit of 800x600 mode flag
                      0: 60Hz, 1: 56Hz, 2: 72Hz 
                  6  If set 640x480 is 72Hz, else 60Hz 
0:489h  BYTE  Bit 5  Low bit of the 1024x768 mode flag
                  6  Low bit of the 800x600 flag 



  Video Modes:
     8   T   132   25   2                   (STB only)
     Ah  T   132   44   2
    18h  T   132   44   4  (8x8)   B000
    19h  T   132   25   4  (9x14)  B000
    1Ah  T   132   28   4  (9x13)  B000
    22h  T   132   44  16  (8x8)
    23h  T   132   25  16  (8x14)
    24h  T   132   28  16  (8x13)
    25h  G   640  480  16  planar
    26h  T    80   60  16  (8x8)
    27h  G   720  512  16  PL4        (Tseng recommended, few boards)
    29h  G   800  600  16  PL4
    2Ah  T   100   40  16  PL4
    2Dh  G   640  350 256  P8
    2Eh  G   640  480 256  P8
    2Fh  G   640  400 256  P8         (ET4000 Only)
    2Fh  G   720  512 256  P8         (Tseng recommended, few boards)
    30h  G   800  600 256  P8
    36h  G   960  720  16  PL4        (STB only)
    37h  G  1024  768  16  PL4
    38h  G  1024  768 256  P8         (ET4000 Only)
    3Dh  G  1280 1024  16  PL4        (newer ET4000s)
    3Eh  G  1280  960  16  PL4        (Definicon)
    6Ah  G   800  600  16  PL4        Newer ET4000s 

   BIOS extensions  (Tseng 4000 Sierra HiColor DAC):

----------1010E0-----------------------------
INT 10 - VIDEO - SpeedStar 24 - SET TrueColor GRAPHICS MODE
        AX = 10E0h
        BL = 2Eh    
Return: AX = 0010h if successful
             other on error
Enters 24bit 640x480 mode if SS24 DAC present.
Video memory is NOT cleared.
Each line uses 2048 bytes with only 640x3=1920 bytes actually used.
So that a line can never cross a 64K border.
----------1010F0-----------------------------
INT 10 - VIDEO - Tseng ET-4000 BIOS - SET HiColor GRAPHICS MODE
        AX = 10F0h
        BL = video mode (see also AH=00h)
             32768-color modes:
                   13h = 320x200
                   2Dh = 640x350
                   2Eh = 640x480
                   2Fh = 640x400
                   30h = 800x600
             16M color modes:
                   3Eh = 640x480   (Genoa 7900) 
        BX =     2DFFh = 640x350   (MEGAVGA/2)
                 2EFFh = 640x480   (MEGAVGA/2)
                 2FFFh = 640x400   (MEGAVGA/2)
Return: AX = 0010h if successful
             other on error
----------1010F1-----------------------------
INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE
        AX = 10F1h
Return: AX = 0010h if successful, errorcode if not
        BL = type of digital/analog converter
             00h normal VGA DAC
             01h Sierra SC11481/6/8 HiColor DAC

         (Diamond SpeedStar 24:)
             02h New SS24 DAC  (16M colors) (actually)

         (Tseng generic BIOS rev 8.00 or later:)
             02h Sierra Mark2 (15-bit) or Mark3 (15/16-bit) DAC  
             03h ATT20c490/1/2 15/16/24 bit HiColor DAC
             04h AcuMos ADAC1 (15/16/24 bit)
             05h Sierra SC15025/26 (15/16/24 bit DAC)
             06h Cirrus Internal 15/16/24 bit DAC (from CL-GD54xx series).
             07h Diamond SS2410. (15/24 bit).
             08h Music MU9c4910 (15/16/24 bit DAC).
             09h Unknown Type 9 ??
----------1010F2-----------------------------
INT 10 - VIDEO - Tseng ET-4000 BIOS - GET/SET HiColor MODE
        AX = 10F2h
        BL = 00h  Get current HiColor mode
             01h  Set 15bit HiColor mode
             02h  Set 16bit HiColor mode
Return: AX = 0010h if successful, errorcode if not
        BL = Current HiColor mode:
             00h  Not in HiColor mode or not a HiColor DAC
             01h  15-bit RGB mode
             02h  16-bit RGB mode
             03h  24-bit RGB mode  
Note: Set HiColor mode (BL=1 or 2) only works if already in some HiColor mode.
----------101D-------------------------------
INT 10 - VIDEO - SpeedSTAR Plus BIOS v4.23+ - SET SYNC PARAMETERS
        AH = 1Dh
        AL = Video Mode
        ES = Caller's segment
Note: The caller's segment contains a table at offset 5Ch or 100h
Offset    Size    Description
 00h    9 BYTEs   ID string 'ey5CENTER'
 09h    5 BYTEs   sync parameters for 640x480 modes 11h,12h,25h,26h,2Eh
 0Eh    5 BYTEs   sync parameters for 800x600 modes 29h,30h,2Ah
 13h    5 BYTEs   sync parameters for 1024x768 modes 37h, 38h
----------101DAA-----------------------------
INT 10 - VIDEO - Diamond SpeedSTAR - CHECK FOR SPEEDSTAR
        AX = 1DAAh
        BX = FDECh
Return: BX = DECFh if found
        AL = AH = DACtype:
                    00h  Standard VGA DAC
                    01h  Highcolor DAC with command bit 3 not writable
                         (Sierra "Mark 1" - SC11481/6/8)
                    02h  SS2410 DAC
                    05h  Highcolor DAC with command bit 3 writable (Sierra
                         "Mark 2/3" - SC11482/3/4/5/7/9)
        SI:DI -> BIOS version & Copyright string




Notes:
  The sequence: 

      port[$3BF]:=3;
      port[$3D8]:=$A0;

is apparently needed to enable the extensions in the Tseng 3000/4000.
Most BIOSes do this by default, but some such as the Sigma VGA Legend
requires this sequence.
Let me know if you encounter any other examples.