The entire S3 family are basically 8514/As with a VGA front-end.
Hardwired Bit-Blt, fill and line drawfunctions.


  S3  86c911     184pin 1Mbyte, 1280x1024x16c, 1024x768x256c, 640x480x32kc
  S3  86c911A    184pin Same as 924??. Corrects a bug in 1280 modes.
  S3  86c924     184pin Support for 24-bit modes.
  S3  86c801     160pin as '928, but limited to 2MB DRAM & no 32bit
                   acceleration- '801 is the ISA version
  S3  86c805     184pin same as '801 but for Local Bus
  S3  86c805i      as 805, but can interleave two banks of DRAM
  S3  86c805p      PCI version of the '805
  S3  86c928     208pin 24bit color, 4MB D/VRAM Accelerated 4/8/16/32bit
  S3  86c928p      PCI version of the '928
  S3  Vision964  208pin. VRAM 64bit chip. Max 8MB (1600x1200 32bit)
  S3  Vision864  208pin. As 964, but with max 4MB DRAM.
  S3  86c732       "Trio32" Integrated '864, DAC and clock chip. 32bit memory
                    path
  S3  86c764     208pin. "Trio64" Integrated '864, DAC and clock chip
  S3  86c866
  S3  86c868     as '864, but with video support
  S3  86c968     as '964, but with video support


  The S3 chip only works in AT and better units as it uses full
  16 bit I/O addresses.

  The S3 has an 8514/A style bitblt engine which uses a number of I/O
  addresses with the lowest 10 bits = 2E8h (4AE8h, 82E8h, BEE8h...).

  Please note that this may conflict with Com4 ports at 2E8h-2EFh !!!


102h (R/W):  Setup Option Select Register (SETUP_MD)
bit    0  SLP MODE. When clear the chip ignores I/O and memory accesses. The
          video system will continue running as before the bit was cleared.
Note: This register can only be accessed when in setup mode, which is
 controlled either by 3C3h bit 0 or 46E8h bit 4. When in setup mode all other
 VGA and extended registers are disabled.

3B8h (R/W):  MDA-Mode Control Register (MDA_MODE)
bit    3  DSP ENB. Enable Display. 1: Blanked, 1: Video enabled
       5  TXT BLK. Text Blinking enabled if set

3B8h (R/W):  HGC-Mode Control Register (HGC_MODE)
bit    1  GRPH MODE. Enable Graphics Mode. 0: Text, 1: 720x348 Graphics
       3  DSP ENB. Enable Display. 0: Blank, 1: Video enabled
       5  TXT BLK. Text Blinking enabled if set
       7  HGC PAGE. Select Hercules Graphics Video Page 1. 0: Display from
          B000h (page 0), 1: Display from B800h (page 1)

3B9h (W):  HGC-Set Light Pen Flag Register (HGCV_SLPEN)
Any write to this register will set the Light Pen Latch

3BAh (R):  MDA Status Register (MDA_STS)
bit    0  HSY. Horizontal Sync Active. Border or Blanking active if set
       3  TEST. B/W Video enabled if set

3BAh (R):  HGC Status Register (HGC_STS)
bit    0  HSY. Horizontal Sync Active. Border or Blanking active if set
       1  LPF. Light Pen Flag on if set
       3  V-DT. Black/White Video enabled if set
       7  /VSY. Vertical Sync Inactive. Vertical Sync active if set

3BBh (W):  Reset Light Pen Flag Register
Any write to this register will clear the Light Pen Latch

3BFh (W):  HGC Configuration Register
bit    0  ENB GRPH. Enable Graphics. 0: Force Text mode, 1: Allow Graphics
          mode
       1  ENB PAGE. Enable Page. 0: 3B8h bit 7 can't be set (always use page
          0), 1: 3B8h bit can be set enabling both pages

3C4h index 08h (R/W):  "PLL Unlock"                                 (732/764)
bit  0-?  Write 6 to unlock the PLL registers (3C4h index 10h-13h,15h..),
          write 0 to lock.

3C4h index 09h (R/W):                                               (732/764)
3C4h index 0Ah (R/W):                                               (732/764)
3C4h index 0Bh (R/W):                                               (732/764)
3C4h index 0Dh (R/W):                                               (732/764)

3C4h index 10h W(R/W):  "Memory PLL Data"                           (732/764)
bit  0-4  N1. Frequency divider. Stored as 1-31, actual value 3-33
     5-7  N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
    8-14  M.  Quotient. Stored as 1-127, actual value 3-129
Note: Frequency is (M/N1)/(1 << N2) *base frequency.M and N1 are the actual
      values, not the stored ones. Typically the base frequency is 14.318 MHz.

3C4h index 12h W(R/W):  "Video PLL Data"                            (732/764)
bit  0-4  N1. Frequency divider. Stored as 1-31, actual value 3-33
     5-7  N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
    8-14  M.  Quotient. Stored as 1-127, actual value 3-129
Note: Frequency is (M/N1)/(1 << N2) *base frequency.M and N1 are the actual
      values, not the stored ones. Typically the base frequency is 14.318 MHz.

3C4h index 15h (R/W):                                               (732/764)
bit    4  Set in 1x 16bit -> 2x 8bit pixel mode
       5  After updating a clock register set write this bit 3 time.
          First 0, then 1 and finally 0.

3C4h index 18h (R/W):                                               (732/764)
bit    7  Set in 1x 16bit -> 2x 8bit pixel mode

3d4h index 2Dh (R):
bit  0-7  Extended Chip ID. Always 88h ?

3d4h index 2Eh (R):  "New chip ID"                               (7xx,866,x68)
bit  0-7  Extended Chip ID (if index 30h is E0h/E1h)
             10h  86c732 (Trio32)
             11h  86c764 (Trio64)
             80h  86c866
             90h  86c868
             B0h  86c968

3d4h index 2Fh (R):  Revision                                    (7xx,866,x68)
bit  0-7  Revision code
     4-7  (86c764) 8 for the 86c765 (Trio64 V+) ??

3d4h index 30h (R):  CR30 Chip ID/REV register
bit  0-7  Chip ID:
             81h  86c911
             82h  86c911A/924
             90h  86c928 original
             91h  86c928 C-step
             94h  86c928 D-step
             95h  86c928 E-step
             A0h  86c801/805 A or B-step
             A2h  86c801/805 C-step
             A5h  86c801/805 D-step
             A6h  86c801/805 P-step
             A8h  86c801/805 I-step
             B0h  86c928PCI
             C0h  Vision 86c864
             C1h  Vision 86c864P
             D0h  Vision 86c964
             D1h  Vision 86c964P
         E0h,E1h  Trio32/64, 86c866,86c868,86c968, See index 2Eh

3d4h index 31h (R/W):  CR31 Memory Configuration Register
bit    0  Enable Base Address Offset (CPUA BASE). Enables bank operation if
          set, disables if clear.
       1  Two Page Screen Image. If set enables 2048 pixel wide screen setup
       2  VGA 16bit Memory Bus Width. Set for 16bit, clear for 8bit
       3  Use Enhanced Mode Memory Mapping (ENH MAP). Set to enable access to
           video memory above 256k.
     4-5  Bit 16-17 of the Display Start Address. For the 801/5,928 see index
           51h, for the 864/964 see index 69h.
       6  High Speed Text Display Font Fetch Mode. If set enables Page Mode
          for Alpha Mode Font Access.
       7  (not 864/964) Extended BIOS ROM Space Mapped out. If clear the area
           C6800h-C7FFFh is mapped out, if set it is accessible.

3d4h index 32h (R/W):  CR32 Backwards Compatibility 1
bit  0-1  Character Clock Period (CK-CLK).
            0: As IBM (8 or 9 dots), 1: 7 dots, 2: 9 dots
       2  Force High Character Clock. Forces full character clock for
          horizontal timing (for CGA and HGC emulation), rather than 1/2 dot
          clock rate
       3  Backward Modes. Clear for VGA, set for MDA, CGA, EGA, HGC
       6  Fix VGA Screen Page with IBM VGA Memory Mapping using Display Start
          Address bit 16-17 (3d4h index 31h bit 4-5)
       7  (928,964) Serial Out Tri-State. If set the SC, SOE0 and SXNR pins
           are tri-stated

3d4h index 33h (R/W):  CR33 Backwards Compatibility 2
bit    1  Disable VDE Protection. Disables the function of 3d4h index 11h bit
          7 on 3d4h index 7 bit 1,6.
       3  VCLK = -DCLK. If set VCLK is inverted DCLK, if clear it is inverted
          DCLK or DCLK/2
       4  Lock Video DAC Writes. If set disables writes to the RamDAC.
       5  Blank/Border Select. If set the blank signal will be the same as
          the active display enable timing, if clear blank comes earlier than
          the display enable by including the border area.
       6  Lock Palette/Overscan Registers if set.
       7  Overrides the CGA "enable video" in 3D8h bit 3 if set.

3d4h index 34h (R/W):  CR34 Backward Compatibility 3
bit  0-3  BIOS use.
       0  Set if address is multiplied with 4 (16color modes ?)
       4  (9xx) Enable Data Transfer Position Control (ENB DTPC). If set the
          Data Transfer position (When a new row should be loaded into the
          shift register of the VRAM) is controlled by 3d4h index 3Bh, if
          clear by 3d4h index 0.
       5  Lock 8/9 Dots (LOCK 8/9D). Lock the character clock period (3C4h
          index 1 bit 5) if set. When emulating EGA the horizontal timing
          registers are programmed for 8 dot character clock.
       7  Lock Clock Select (LOCK CKSL). If set the bits 2-3 of the
          Miscellaneous Output register (3C2h) are locked.

3d4h index 35h (R/W):  CR35 CRT Register Lock
bit  0-3  CPU Base Address. 64k bank number. For the 801/5 and 928 see 3d4h
          index 51h bits 2-3. For the 864/964 see index 6Ah.
       4  Lock Vertical Timing Registers (LOCK VTMG). Locks 3d4h index 6, 7
          (bits 0,2,3,5,7), 9 bit 5, 10h, 11h bits 0-3, 15h, 16h if set
       5  Lock Horizontal Timing Registers (LOCK HTMG). Locks 3d4h index
          0,1,2,3,4,5,17h bit 2 if set
       6  (911/924) Lock VSync Polarity.
       7  (911/924) Lock HSync Polarity.

3d4h index 36h (R/W):  CR36 Reset State Read 1
bit  0-1  (R) System Bus Select. 0: EISA (805 only), 1: Originally "386/486
           local bus" later "VESA local bus", 2: MCA (911/24), PCI bus (805P
           /928P +) or 8bit (801/5,928 undoc), 3: ISA (not 805)
       2  (911-928) VGA ROM Width. Set if 8bit, clear if 16bit
     2-3  (864/964) Memory Page Mode Select. 2: Extended Data Out (EDO) Mode,
           3: Fast Page Mode
       3  (911/24) VRAM. Set if using VRAM (should always be set)
          (801/5,928) VGA BIOS ROM Enable. If set BIOS is C0000h-C7FFFh, if
           clear C0000h-C5FFFh plus C6800h-C7FFFh
       4  (911/24) Set if display memory is dedicated (Should always be set)
          (801/5,928 ISA Bus) Address Bit Range for MEMCS16. LA[17-23] if set,
            also SA16 if clear
          (805,928 Local Bus) SAUP2/ROMCS Select. If clear SAUP2 pin is ROMCS,
            if set it is unchanged.
          (864,964) Enable Video BIOS Access (VL-Bus) if set.
       5  (911/24) Video memory. 0: 1Mb, 1: 512Kb
     5-7  (not 911/924) Display Memory Size. 0: 4MB, 2: 3MB, 3: 8MB, 4: 2MB,
            5: 6MB, 6: 1MB, 7: 512Kb
       7  (911/24) Display Memory WPB is available if set (should always be
            set)
Note: These bits are latched from pins PD[0-7] on reset

3d4h index 37h (R/W):  CR37 Reset State Read 2
bit    0  (ISA Bus) Setup SEL for ISA bus. If set SEL is 46E8h bit 4, bit 5 if
           clear
          (Local Bus) VGA Enable. Enables VGA chip if set
       1  (911/24) VRAM Display Memory Speed. Set for Fast Page Mode (80ns
           VRAM), clear for Page Mode (100ns VRAM).
          (801/5,928) Reserved(1)
          (964) Test Mode enabled if clear. All outputs are tri-stated
       2  (911/24) 386/486 System Setup is ISA style if set, MCA style if
           clear
          (801/5,928) Extended Monitor Identification. Extends bit 5-7
          (964 CVL-Bus) Video BIOS ROM Size. Set for 32K, clear for 64K
       3  (Local Bus) LOCA Signal Select. Tri-state signal if set, Level
           signal if clear
          (ISA Bus) No Wait State. NOWS disabled if clear
          (964) Dual CAS Select. Set for Dual WE, clear for Dual CAS
       4  (ISA bus) Normal MEMCS16 generation if set, external if clear
          (Local Bus) Disable LOCA and SRDY for video DAC accesses if clear
     5-7  Additional Monitor Identification.
            0:  640x480 at 60Hz Non-interlaced (Std VGA)
            1:  640x480 at 70Hz Non-interlaced
            2:  800x600 at 60Hz Non-interlaced
            3:  800x600 at 72Hz Non-interlaced
            4:  800x600 at 56Hz Non-interlaced
            5: 1024x768 at 43Hz Interlaced
            6: 1024x768 at 60Hz Non-interlaced
            7: 1024x768 at 70Hz Non-interlaced
               1280x960 at 46Hz Interlaced
Note: These bits are latched from pins PD[8-15] on reset

3d4h index 38h (R/W):  CR38 Register Lock 1
bit  2-3  Write 2 to unlock. Bit 6-7 must also be set
     6-7  Write 1 to unlock. Bit 3-4 must also be set
Note: Traditionally 48h is used to unlock and 00h to lock

3d4h index 39h (R/W):  CR39 Register Lock 2
bit  0-2  (911/24) Write 5 to unlock the Test Register ?
     5-7  Write 5 to unlock the System Control Registers (3d4h index >=40h)
Note: Traditionally A5h is used to unlock and 5Ah to lock

3d4h index 3Ah (R/W):  CR3A Miscellaneous 1
bit  0-1  Alternate Refresh Count Control. If bit 2 is set this is the number
          of refresh cycles per scanline, rather than 3d4h index 11h bit 6.
       2  Enable Alternate Refresh Count Control (bits 0-1) if set
       3  Top Memory Access (TOP MEM). Forces PCU and CRTC accesses into the
          upper 32k or 64K if set
       4  256 Color Enhanced Mode. Configure Shift registers in the Attribute
          Controller for 8, 16 or 24 bit data if set, 4bit if clear
       5  Enables High Speed Text CPU font writing if set.
       7  (911-928) Enable MEMCS16 Bus Signal. If set MEMCS16 is 16bits, else
            8 bits.
          (964) PCIRB DISA. PCI Read Bursts Disabled if set. 3d4h index 66h
            bit 7 should be set before this bit is set

3d4h index 3Bh (R/W):  CR3B Data Transfer Execute Position Register      (9xx)
bit  0-7  The Horizontal character position of the data transfer execution in
          memory clocks. Usually in the middle of 3d4h index 0 and 3d4h index
          4

3d4h index 3Ch (R/W):  CR3C Interlaced Mode Start/End Register
bit  0-7  Interlace mode frame offset (Typically half the horizontal total).

3d4h index 40h (R/W):  CR40 System Configuration
bit    0  Enable Enhanced Register Access. Enables 8514/a registers
          (x2E8h,x6E8h,xAE8h,xEE8h) if set
       1  (911/24) CPC I/O Select. If set CPC selected VDCRD/WR are I/O
           decoded R/W signals, if clear RAMDAC is selected
          (801/5) Signal Select. If set the MID0 signal is STRD
          (928) Signal Select. If set the MID0 signal becomes STRD if 3d4h
            index 55h bit 2 is set, MID0 becomes BGNT  and MID1 becomes BREQ
            if 3d4h index 55h bit 2 is clear.
       2  (911-928) Write Wait Control (Local Bus only). 1 wait state if set,
           none if clear
       3  (911-928) Enable Fast Write Buffer (FIFO) if set (ISA bus only for
            911/24, all busses for 801/5,928).
       4  (864,964) RDY CTL. Ready Control (VL-bus only). If set there is
           minimum 1 wait state between the assertion of /SADS and /ARDY (for
           command writes), if clear the minimum is 0.
       5  (864,964) WDL DLAY. Write Latching Delay (VL-bus only). If set write
           data is latched on the first rising edge of SCLK after assertion of
           /SRDY, if clear after /RDYIN
     4-5  (911-928) Decode Wait Control (Local Bus only). Number of wait
            states. 0: 0ws, 1: 1ws, 2: 3ws, 3: 2ws
     6-7  (911-928) Read Wait Control.
           Local Bus: Number of wait states  0: 0ws, 1: 1ws, 2: 3ws, 3: 2ws
           ISA Bus (801/5,928): 0 enables the NOWS signal, 1-3 disables
          (864,964) BUS TNO. Bus Turnaround Non-Overlap (VL-bus only).
           Controls the interval between deassertion of /ABEN and the
           assertion of /DBEN (or vice versa).
             0: 1unit, 1: 2units, 2: 3units, 3: 4units

3d4h index 41h (R/W): CR41 BIOS Flag Register
bit  0-4  (Diamond 864/964) Clock index for current mode.
       4  (911/924) Set if we have 1MByte, clear if we have 512KBytes.
       6  Dual Display VGA test size. Set for 32K, clear for 64K
          Note: this might be reversed for 80x/928 ????
       7  Set to enable dual display
Note: Undocumented on the 911

3d4h index 42h (R/W):  CR42 Mode Control
bit  0-3  DCLK Select. These bits are effective when the VGA Clock Select
          (3C2h/3CCh bit 2-3) is 3.
       5  Interlaced Mode if set.

3d4h index 43h (R/W):  CR43 Extended Mode
bit    0  Video Clock Edge Mode Select. If clear video data is output on the
          rising edge of DCLK only, if set on both rising and falling edge.
       1  DAC Register Select bit 2. This bit is output to the palette chip
          RS2 pin, which on advanced DACs works as a 3rd address bit to the
          DAC registers at 3C6h-3C9h.
          (801/5,928) Only active if 3d4h index 55h bits 0-1 is 0
       2  Logical Screen Width bit 8. Bit 8 of the Display Offset Register/
          (3d4h index 13h). (801/5,928) Only active if 3d4h index 51h bits 4-5
          are 0
       3  (911-928) Enable 64K Color Mode. Enables 16bit modes if set
       4  (911-928) Translate Enable. If set the '8514' registers use
          alternate addresses (x148h, x548h, x948h and xD48h), if clear
          standard addresses (x2E8h, x6E8h, xAE8h and xEE8h).
       5  (911/24) Clock Stop Control. If set stops DCK0 (Attribute Control 0)
       6  (911/24) Clock Stop Control. If set stops DCK1 (Attribute Control 1)
       7  (911/24) Clock Stop Control. If set stops GCLK (GE and DM Clock)
          (80x +) Horizontal Counter Double Mode. If set character clocks
            are 16 pixels wide rather than 8.

3d4h index 45h (R/W):  CR45 Hardware Graphics Cursor Mode
bit    0  HWGC ENB. Hardware Graphics Cursor Enable. Set to enable the
          HardWare Cursor in VGA and enhanced modes.
       1  (911/24) Delay Timing for Pattern Data Fetch
       2  (801/5,928) Hardware Cursor Horizontal Stretch 2. If set the cursor
           pixels are stretched horizontally to two bytes and items 0 and 1 of
           the fore/background stacks in 3d4h index 4Ah/4Bh are used.
       3  (801/5,928) Hardware Cursor Horizontal Stretch 3. If set the cursor
           pixels are stretched horizontally to three bytes and items 0,1 and
           2 of the fore/background stacks in 3d4h index 4Ah/4Bh are used.
     2-3  (805i,864/964) HWC-CSEL. Hardware Cursor Color Select.
            0: 4/8bit, 1: 15/16bt, 2: 24bit, 3: 32bit
          Note: So far I've had better luck with: 0: 8/15/16bit, 1: 32bit??
       4  (80x +) Hardware Cursor Right Storage. If set the cursor data is
           stored in the last 256 bytes of 4 1Kyte lines (4bits/pixel) or the
           last 512 bytes of 2 2Kbyte lines (8bits/pixel). Intended for
           1280x1024 modes where there are no free lines at the bottom.
       5  (928) Cursor Control Enable for Brooktree Bt485 DAC. If set and 3d4h
           index 55h bit 5 is set the HC1 output becomes the ODF and the HC0
           output becomes the CDE
          (964) BT485 ODF Selection for Bt485A RAMDAC. If set pin 185 (RS3
           /ODF) is the ODF output to a Bt485A compatible RamDAC (low for even
           fields and high for odd fields), if clear pin185 is the RS3 output.


3d4h index 46h M(R/W):  CR46/7 Hardware Graphics Cursor Origin-X
bit 0-10  The HardWare Cursor X position. For 64k modes this value should be
          twice the actual X co-ordinate.

3d4h index 48h M(R/W):  CR48/9 Hardware Graphics Cursor Origin-Y
bit  0-9  (911/24) The HardWare Cursor Y position.
    0-10  (80x +) The HardWare Cursor Y position.
Note: The position is activated when the high byte of the Y coordinate (index
      48h) is written, so this byte should be written last (not 911/924 ?)

3d4h index 4Ah (R/W):  Hardware Graphics Cursor Foreground Stack       (80x +)
bit  0-7  The Foreground Cursor color. Three bytes (4 for the 864/964) are
          stacked here. When the Cursor Mode register (3d4h index 45h) is read
          the stackpointer is reset. When a byte is written the byte is
          written into the current top of stack and the stackpointer is
          increased. The first byte written (item 0) is allways used, the
          other two(3) only when Hardware Cursor Horizontal Stretch (3d4h
          index 45h bit 2-3) is enabled.

3d4h index 4Bh (R/W):  Hardware Graphics Cursor Background Stack       (80x +)
bit  0-7  The Background Cursor color. Three bytes (4 for the 864/964) are
          stacked here. When the Cursor Mode register (3d4h index 45h) is read
          the stackpointer is reset. When a byte is written the byte is
          written into the current top of stack and the stackpointer is
          increased. The first byte written (item 0) is allways used, the
          other two(3) only when Hardware Cursor Horizontal Stretch (3d4h
          index 45h bit 2-3) is enabled.

3d4h index 4Ch M(R/W):  CR4C/D Hardware Graphics Cursor Storage Start Address
bit  0-9  (911,924) HCS_STADR. Hardware Graphics Cursor Storage Start Address
    0-11  (80x,928) HWGC_STA. Hardware Graphics Cursor Storage Start Address
    0-12  (864,964) HWGC_STA. Hardware Graphics Cursor Storage Start Address
          Address of the HardWare Cursor Map in units of 1024 bytes (256 bytes
          for planar modes). The cursor map is a 64x64 bitmap with 2 bits (A
          and B) per pixel. The map is stored as one word (16 bits) of bit A,
          followed by one word with the corresponding 16 B bits.
          The bits are interpreted as:
             A    B    MS-Windows:         X-11:
             0    0    Background          Screen data
             0    1    Foreground          Screen data
             1    0    Screen data         Background
             1    1    Inverted screen     Foreground
          The Windows/X11 switch is only available for the 80x +.
          (911/24) For 64k color modes the cursor is stored as one byte (8
            bits) of A bits, followed by the 8 B-bits, and each bit in the
            cursor should be doubled to provide a consistent cursor image.
          (801/5,928) For Hi/True color modes use the Horizontal Stretch bits
            (3d4h index 45h bits 2 and 3).

3d4h index 4Eh (R/W):  CR4E HGC Pattern Disp Start X-Pixel Position
bit  0-5  Pattern Display Start X-Pixel Position.

3d4h index 4Fh (R/W):  CR4F HGC Pattern Disp Start Y-Pixel Position
bit  0-5  Pattern Display Start Y-Pixel Position.

3d4h index 50h (R/W):  Extended System Control 1 Register              (80x +)
bit    2  (928,964) Enable BREQ Function. If set the BREQ and BGNT functions
           are enabled.
       3  (not 864/964) Disable LOCA/SRDY. If set disables the LOCA/SRDY
           signals on the Local Bus for writing to the DAC.
     4-5  Pixel Length Select. Selects the pixel length for Enhanced Mode.
           0: 4 or 8 bits/pixel (1 byte), 1: 16 bits/pixel (2 bytes)
           3: 32bits/pixel (4bytes) - 928 and later
     6-7  (80x A&B, 928 rev A-D) Graphics Engine Command Screen Pixel Width.
           0: 1024 or 2048, 1: 640, 2: 800, 3: 1280
   0,6-7  (80x C+,928 E+, 864/964) Graphics Engine Command Screen Pixel Width.
           0: 1024 (or 2048 if 3d4h index 31h bit 1 set) , 1: 1152, 2: 640,
            4: 800 (or 1600 if 4AE8h bit 2 set), 5: 1600, 6: 1280

3d4h index 51h (R/W):  Extended System Control 2 Register              (80x +)
bit    0  (80x) Display Start Address bit 18
     0-1  (928 +) Display Start Address bit 18-19.
          Bits 16-17 are in index 31h bits 4-5, Bits 0-15 are in 3d4h index
          0Ch,0Dh. For the 864/964 see 3d4h index 69h
       2  (80x) CPU BASE. CPU Base Address Bit 18.
     2-3  (928 +) Old CPU Base Address Bits 19-18.
           64K Bank register bits 4-5. Bits 0-3 are in 3d4h index 35h.
           For the 864/964 see 3d4h index 6Ah
     4-5  Logical Screen Width Bit [8-9]. Bits 8-9 of the CRTC Offset register
          (3d4h index 13h). If this field is 0, 3d4h index 43h bit 2 is active
       6  (928,964) DIS SPXF. Disable Split Transfers if set. Spilt Transfers
           allows transferring one half of the VRAM shift register data while
           the other half is being output. For the 964 Split Transfers
           must be enabled in enhanced modes (4AE8h bit 0 set). Guess: They
           probably can't time the VRAM load cycle closely enough while the
           graphics engine is running.
       7  (not 864/964) Enable EPROM Write. If set enables flash memory write
           control to the BIOS ROM address
Note: both index 38h and 39h must be enabled to access this register.

3d4h index 52h (R/W):  Extended BIOS Flag 1 Register                   (80x +)
bit  0-7  Scratch Pad
     0-3  (Diamond) Table entry ?
       4  (Diamond) VCLK doubler
       5  (Diamond) Interlace/NI
     6-7  (Diamond) Vsync/Hsync

3d4h index 53h (R/W):  Extended Memory Control 1 Register              (80x +)
bit  0-1  (80x) Enable Write Per Bit MB1,MB0.
     0-3  (928) Enable Write Per Bit MB3,MB2,MB1,MB0
           Enables Write Per Bit Flags for each 1MB memory bank.
       0  (864/964) ENB WPB. Enable Write Per Bit. Enables Write Per Bit for
           all memory banks if set
     3-4  (868/968) Set to 3 to enable "New Memory Mapped I/O"
       4  (801/5) Enable MMIO Access. If set to enables the 32K MMIO (Memory
            Mapped I/O registers) at A0000h-A7FFFh.
          (928 +) Enable MMIO Access. If set the 32K MMIO area at A0000h
            -A7FFFh is used for image transfers via E2E8h and E2EAh, and the
            second 32K MMIO area at A8000h-AFFFFh is used for the command
            registers (82E8h-BEE8h)
       5  (928,964) PAR VRAM. Parallel VRAM Addressing. Parallel if set,
           serial if clear. (964) Only needs to be set when a 64bit pixel bus
           is used (3d4h index 66h bits 4-5 = 2).
          (801/5i) DRAM interleaving if set
       6  SWP NBL. Swap Nibbles. If set swaps the nibbles (4bits) in each byte
          read or written to/from video memory.
       7  (not 864/964) Enable Nibble Write Control if set

3d4h index 54h (R/W):  Extended Memory Control 2 Register              (80x +)
bit  0-2  (not 964) Read Ahead Cache (RAC) Extra Prefetch Control. The number
           of doublewords to prefetch (words/bytes in VGA word/byte mode).
          Only 1,3 and 7 are meaningful.
     3-7  (80x,964) M Parameter.

3d4h index 55h (R/W):  Extended Video DAC Control Register             (80x +)
bit 0-1  DAC Register Select Bits. Passed to the RS2 and RS3 pins on the
         RAMDAC, allowing access to all 8 or 16 registers on advanced RAMDACs.
         If this field is 0, 3d4h index 43h bit 1 is active.
      2  Enable General Input Port Read. If set DAC reads are disabled and the
         STRD strobe for reading the General Input Port is enabled for reading
         while DACRD is active, if clear DAC reads are enabled.
      3  (928) Enable External SID Operation if set. If set video data is
           passed directly from the VRAMs to the DAC rather than through the
           VGA chip
      4  Hardware Cursor MS/X11 Mode. If set the Hardware Cursor is in X11
         mode, if clear in MS-Windows mode
      5  (80x,928) Hardware Cursor External Operation Mode. If set the two
          bits of cursor data ,is output on the HC[0-1] pins for the video DAC
          The SENS pin becomes HC1 and the MID2 pin becomes HC0.
      6  ??
      7  (80x,928) Disable PA Output. If set PA[0-7] and VCLK are tristated.
         (864/964) TOFF VCLK. Tri-State Off VCLK Output. VCLK output tri
          -stated if set

3d4h index 56h (R/W):  External Sync Control 1 Register                (80x +)
bit   0  RMT ON. Remote Mode Operation. If set the VSync pin is the input for
         Gen-Lock
      1  (not 864/964) NTSC Mode. If set enables the special NTSC Horizontal
         counter mode, where two dot clocks are skipped in each scanline,
         relative to the value programmed in the Horizontal Total register
         (3d4h index 0). Typical Horizontal Total value is 114 clocks. Index
          00h = 109.
      2  (not 864/964) PAL Mode.  If set enables the special PAL Horizontal
         counter mode, where one dot clock is skipped in each scanline,
         relative to the value programmed in the Horizontal Total register
         (3d4h index 0). Typical Horizontal Total value is 142 clocks. Index
          00h = 137.
      3  External Sync Mode Select. If Remote Mode is selected (bit 0 is set)
         the falling edge of the VSync input signal resets the Vertical
         counter if this bit is set, or both the Horizontal and Vertical
         counters if this bit is clear.
      4  Preset Frame Select. If bit 0 and 3 are both set, the starting frame
         after the Vertical reset is Odd if this bit is set, even if not.
      5  Disable SYNC Output. If set HSYNC, VSYNC and BLANK are tristated.

3d4h index 57h (R/W):  External Sync Control 2 Register                (80x +)
bit  0-3  Vsync Reset Adjust. The vertical delay of the Vertical counter reset
          from the falling edge of VSync in scan lines. Must be non-zero in
          Remote mode (3d4h index 56h bit 0 set).
     4-7  Hsync Reset Adjust. The horizontal delay of the Horizontal counter
          reset from the falling edge of VSync in character clocks.

3d4h index 58h (R/W):  Linear Address Window Control Register          (80x +)
bit  0-1  Linear Address Window Size. Must be less than or equal to video
          memory size. 0: 64K, 1: 1MB, 2: 2MB, 3: 4MB (928)/8Mb (864/964)
       2  (not 864/964) Enable Read Ahead Cache if set
       3  (80x,928) ISA Latch Address. If set latches address during every ISA
           cycle, unlatches during every ISA cycle if clear.
          (864/964) LAT DEL. Address Latch Delay Control (VL-Bus only). If set
           address latching occours in the T1 cycle, if clear in the T2 cycle
           (I.e. one clock cycle delayed).
       4  ENB LA. Enable Linear Addressing if set.
       5  (not 864/964) Limit Entry Depth for Write-Post. If set limits Write
           -Post Entry Depth to avoid ISA bus timeout due to wait cycle limit.
       6  (928,964) Serial Access Mode (SAM) 256 Words Control. If set SAM
            control is 256 words, if clear 512 words.
       7  (928) RAS 6-MCLK. If set the random read/write cycle time is 6MCLKs,
           if clear 7MCLKs

3d4h index 59h M(R/W):  Linear Address Window Position Register        (80x +)
bit  0-9  (80x,928) Linear Address Window Position.
           This is bit 16-25 of the Linear Address Window Starting Position.
           Bits 26-31 are generated externally and input on the SAUP1 pin.
    0-15  (864/964) Linear Address Window Position.
           This is bit 16-31 of the Linear Address Window Starting Position.
          ISA configurations ignore bits 24-31 of the address (and thus bits
           8-9/15 of this register). If the Linear Address Window Size (3d4h
          index 58h bits 0-1) is >64K the lower 4 (1MB),5 (2MB),6 (4MB) or
           7 (8MB) bits of this register are ignored. For PCI systems bits
          23-31 of the address is common with bits 23-31 of the PCI Base
          Address 0 register at PCI offset 10h. Writes to either register will
          be reflected in the other, but bits 23-31 should be updated through
          the PCI register.

3d4h index 5Bh (R/W):  Extended BIOS Flag 2 Register                   (80x +)
bit  0-7  Scratch Pad.
     0-3  (Diamond) Monitor type. 0: NEC 3Fg, 1: NEC 6Fg, 2: VESA 75Hz,
                     3: NEC 4Fg, 4: Gen90?, 5: CS1024i, NEC 3FGx, 8: Fixed?,
                     9: Sony 1304, 10: Sony 1304s, 11: CS1572, 12: NEC 5FGe,
                     13: Mon100?, 14: Mon120?, 15: Reserved fopr Vmode

3d4h index 5Ch (R/W):  General Output Port Register                    (80x +)
bit  0-3  (R) Clock Select Out. If 3C2h/3CCh bit 2-3 is 3 this is 3d4h index
          42h bits 0-3, else bits 0-1 are 3C2h/3CCh bits 2-3 and bits 2-3 are
          0. Thus this is the resulting clock select signals output.
     4-7  General Output Port. Can be used for external logic.
       4  (ELSA) EEProm Data Bit
       5  (ELSA) EEProm Chip Read Select. Set for read access
          (TVP3025 systems) Connected to RS4 on the TVP3025. Set for Bt485
           mode, clear for TVP3020 mode.
       6  (ELSA) EEProm Clock Bit
       7  (ELSA) EEProm Chip Select. Set to access the EEProm
          (STB Pegasus) Changes Video Memory mapping. If set video memory is
           mapped in the 7C000000h-7FFFFFFFh range (A26-31 = 011111), if clear
           at 0-3FFFFFFh range (A26-31 = 0).

3d4h index 5Dh (R/W):  Extended Horizontal Overflow Register           (80x +)
bit    0  Horizontal Total bit 8. Bit 8 of the Horizontal Total register (3d4h
          index 0)
       1  Horizontal Display End bit 8. Bit 8 of the Horizontal Display End
          register (3d4h index 1)
       2  Start Horizontal Blank bit 8. Bit 8 of the Horizontal Start Blanking
          register (3d4h index 2).
       3  (864,964) EHB+64. End Horizontal Blank +64. If set the /BLANK pulse
           is extended by 64 DCLKs. Note: Is this bit 6 of 3d4h index 3 or
           does it really extend by 64 ?
       4  Start Horizontal Sync Position bit 8. Bit 8 of the Horizontal Start
          Retrace register (3d4h index 4).
       5  (864,964) EHS+32. End Horizontal Sync +32. If set the HSYNC pulse
           is extended by 32 DCLKs. Note: Is this bit 5 of 3d4h index 5 or
           does it really extend by 32 ?
       6  (928,964) Data Transfer Position bit 8. Bit 8 of the Data Transfer
            Position register (3d4h index 3Bh)
       7  (928,964) Bus-Grant Terminate Position bit 8. Bit 8 of the Bus Grant
            Termination register (3d4h index 5Fh).

3d4h index 5Eh (R/W):  Extended Vertical Overflow Register             (80x +)
bit    0  Vertical Total bit 10. Bit 10 of the Vertical Total register (3d4h
          index 6). Bits 8 and 9 are in 3d4h index 7 bit 0 and 5.
       1  Vertical Display End bit 10. Bit 10 of the Vertical Display End
          register (3d4h index 12h). Bits 8 and 9 are in 3d4h index 7 bit 1
          and 6
       2  Start Vertical Blank bit 10. Bit 10 of the Vertical Start Blanking
          register (3d4h index 15h). Bit 8 is in 3d4h index 7 bit 3 and bit 9
          in 3d4h index 9 bit 5
       4  Vertical Retrace Start bit 10. Bit 10 of the Vertical Start Retrace
          register (3d4h index 10h). Bits 8 and 9 are in 3d4h index 7 bit 2
          and 7.
       6  Line Compare Position bit 10. Bit 10 of the Line Compare register
          (3d4h index 18h). Bit 8 is in 3d4h index 7 bit 4 and bit 9 in 3d4h
          index 9 bit 6.

3d4h index 5Fh (R/W):  Bus Grant Termination Position Register       (928,964)
bit  0-7  Bus Grant Termination Position. The termination position in
          character clocks for the BGNT signal. Valid only if 3d4h index 50h
          bit 2 set.

3d4h index 60h (R/W):  Extended Memory Control 3                     (864,964)
bit  0-7  N parameter. Number of 4byte(1Mb) or 8byte(2/4Mb) memory cycles
          reserved for the display FIFO before other requestors are served

3d4h index 61h (R/W):  Extended Memory Control 4                     (864,964)
bit  0-2  L Parameter bits 8-10. Bits 0-7 are in index 62h
       7  ENB DFLC. Enable Display Fetch Length Control (L Parameter) enabled
          if set

3d4h index 62h (R/W):  Extended Memory Control 5                     (864,964)
bit  0-7  L Parameter bits 0-7. Bits 8-10 are in index 61h. Number of bytes
          per scanline divided by 4(for 1Mb - 32bit) or 8(for 2/4Mb - 64bit).
          When the display FIFO has received this many memory cycles the FIFO
          will need no further cycles until the next line starts.

3d4h index 63h (R/W):  Extended Sync Delay Adjust High               (864,964)
bit  0-3  VSYNC Reset Adjust bits 4-7. Bits 0-3 are in 3d4h index 57h bits 0-3
     4-7  HSYNC Reset Adjust bits 4-7. Bits 0-3 are in 3d4h index 57h bits 4-7

3d4h index 64h (R/W):  Genlocking Adjustment Register                (864,964)
bit  0-2  H-Counter Dot Addition Adjust. Adjusts the timing of the H-Counter
          reset delay n Dot Clocks.
       3  H-Counter Dot Addition Adjust enabled if set
     4-6  Character Clock Phase Adjust. Delay (in dot clocks) from the rising
          edge of VSYNC to the character clock.
       7  Character Clock Phase Adjust enabled if set

3d4h index 65h (R/W):  Extended Miscellaneous Control                (864,964)
bit    0  SE DLAY. Delay falling edge of SE. If set the falling edges of SE0-3
          are delayed. This reduces the risc of data contention when several
          memory banks are outputting to the same pixel bus.
       1  DISA 1SC. Disable 1st SC0-1 Output. If set the early SC0-1 output
          during blanking is disabled when split transfers are enabled
       2  ENB 3C3. Enable 3C3h for Video Subsystem Setup. If set 3C3h is used
          for video subsystem setup, if clear 46E8h is used.
     6-7  ADR ADJ. Address adjustment for split transfers. 0: No adjustment
          (32 or 64bit pixel bus), 2: 512word shift register and 128bit pixel
          bus, 3: 256word shift register and 128bit pixel bus.
      When using the TI TVP3020 DAC should be set to: 0: Palette modes
           (4/8bit modes), 1: 15/16bit modes, 2: 32bit modes

3d4h index 66h (R/W):  Extended Miscellaneous Control 1              (864/964)
bit  0-2  DIV-SC. Divide SC,SE and VCLK. 0: SC,SE and VCLK = DCLK, 1: SC,SE
          and VCLK = DCLK/2,  2: SC,SE and VCLK = DCLK/4, 3: SC,SE and VCLK
           = DCLK/8, 4: SC,SE and VCLK = DCLK/16, 5: SC,SE and VCLK = DCLK/32
       3  SC=VCLK. Set SC0 to VCLK Frequency. if set SC = VCLK and SC1 =
          inverted VCLK regardless of bits 4-5.
     4-5  SID-MODE. SID Operation Mode. 0: 64bit serial pixel bus, 1: 32bit
          parallel pixel bus, 2: 128bit serial (or 64bit parallel) pixel bus,
          3: 32bit serial pixel bus.
       6  TOFF PADT. Tri-State Off Pixel Address Bus. If set PA0-7 (the VGA
          pixel bus) is tri-stated.
       7  PCI DE. PCI Bus Disconnect Enabled if set

3d4h index 67h (R/W):  Extended Miscellaneous Control 2         (805i,864/964)
bit    0  VCLK PHS. VCLK Phase With Respect to DCLK. If clear VLKC is inverted
          DCLK, if set VCLK = DCLK.
     1-7  Documented as reserved, however:
     4-7  Pixel format.
             0  Mode  0: 8bit (1 pixel/VCLK)
             1  Mode  8: 8bit (2 pixels/VCLK)
             3  Mode  9: 15bit (1 pixel/VCLK)
             5  Mode 10: 16bit (1 pixel/VCLK)
             7  Mode 11: 24/32bit (2 VCLKs/pixel)
            13  (732/764) 32bit (1 pixel/VCLK)

3d4h index 68h (R/W):  Configuration 3 Register                      (864,964)
bit  0-1  /CAS,/WE,/OE Stretch Time. 0: 4units delay, 1: 3units delay,
            2: 2units delay, 3: 1unit delay
     2-3  MA-D-SEL. Memory Address Depth Select. 1: 128K (512 rows X 256
           coloumns), 3: 256K (512 rows X 512 coloumns).
     4-5  /RAS-LOW. /RAS Low Timing Select. 0: 6.5 MCLKs, 1: 5.5 MCLKs,
            2: 4.5 MCLKs, 3: 3.5 MCLKs
     6-7  /RAS-PCG. /RAS Precharge Timing Select. 1: 4.5 MCLKs, 2: 3.5 MCLKs,
            3: 2.5 MCLks
Note: This register is latched from PD16-23 on reset. Write A5h to index 39h
      to update this register.

3d4h index 69h (R/W):  Extended System Control 3                     (864,964)
bit  0-4  Display Start Address bits 16-20
Note: The Display Start registers at index 31h/51h still works.

3d4h index 6Ah (R/W):  Extended System Control 4                     (864,964)
bit  0-6  Bank register in units of 64Kbytes.
Note: The bank registers at index 35h/51h still works.

3d4h index 6Bh (R/W):  Extended BIOS Flag 3                          (864,964)
bit  0-7  Reserved

3d4h index 6Ch (R/W):  Extended BIOS Flag 4                          (864,964)
bit  0-7  Reserved

3d4h index 6Dh (R/W):  Extended Miscellaneous Control           (805i,864/964)
bit  0-2  DELAY-BL-BY-DCLK. Delay /BLANK by DCLK. Number of DCLKs to delay the
          BLANK signal. Pulse width is not affected.
     4-6  DELAY-SC-BY-VCLK. Number of VCLKs to delay SC0-1. Pulse width is not
          affected.

3D8h (R/W):  CGA Mode Control Register (CGA_MODE)
bit    0  HRES TEXT. Select High Resolution Text. 0: 40x25, 1: 80x25
       1  GRPH MODE. Select Graphics Mode. 0: Text, 1: Graphics
       2  B/W MODE. Select Black/White Mode. 0: Color enabled, 1: Color
          disabled, In 320x200 4 color mode the pixels are:
            0: background, 1: Cyan, 2: Red, 3: White
       3  DISP ENB. Enable Display.  0: Blank, 1: Video Enabled
       4  HRES GRPH. Select High Resolution Graphics. 1: Enable 640x200
          graphics mode, 0: all other modes.
       5: TEXT BLNK. Enable Text Blinking. 0: disabled, 1: enabled

3D9h (R/W):  CGA Color Select Register (CGA_COLOR)
bit    0  BORDER/BKGR COLOR. Select Blue Border. 0: Blue not selected,
           1: Blue border in text mode, blue background & border in 320x200
              mode, blue foreground in 640x200 mode.
       1  BORDER/BKGR COLOR. Select Green Border. 0: Green not selected,
           1: Green border in text mode, green background & border in 320x200
              mode, green foreground in 640x200 mode.
       2  BORDER/BKGR COLOR. Select Red Border. 0: Red not selected,
           1: Red border in text mode, red background & border in 320x200
              mode, Red foreground in 640x200 mode.
       3  BORDER/BKGR COLOR. Select intensified Border. 0: No intensification,
           1: Intensified border in text mode, intensified background & border
           in 320x200 mode, intensified foreground in 640x200 mode.
       4  SEL I-EN. Select Alternate Color Set. 0: Alternate color set not
          enabled, 1: Background color in text mode, Enable alternate color
          set in graphics mode.
       5  SEL CSET. Select Color Set in 320x200 mode.
            0: Palette: 0: Background, 1: Green, 2: Red, 3: Yellow
            1: Palette: 0: Background, 1: Cyan, 2: Violet, 3: White

3DAh (R):  CGA Status Register (CGA_STAT)
bit    0  /DTM. Border/Blanking Active. Border or Blanking active if set
       1  LPF. Light Pen Flag. 0: Light Pen Latch cleared, 1: light Pen Latch
          triggered.
       2  Light Pen switch open if set, cleared if not
       3  VSY. Vertical Sync Active. if set

3DBh (W):  Reset Light Pen Flag Register (RLPEN)
Any write to this register will reset the Light Pen Latch

3DCh (W):  Set Light Pen Flag Register (SLPEN)
Any write to this register will set the Light Pen Latch


Below are the 8514/A registers. 3d4h index 40h bit 0 must be set to use them.

42E8h W(R):  Subsystem Status Register (SUBSYS_STAT)
bit   0-3  Interrupt requests. These bits show the state of internal interrupt
           requests. An interrupt will only occur if the corresponding bit(s)
           in SUBSYS_CNTL is set. Interrupts can only be reset by writing a 1
           to the corresponding Interrupt Clear bit in SUBSYS_CNTL.
             Bit 0: Vertical Sync Interrupt
                 1: Graphics Engine Busy Interrupt
                 2: FIFO Overflow Interrupt
                 3: FIFO Empty Interrupt
      4-6  MONITORID.
              2: IBM 8514/A color 16"
              5: IBM 8503 Monochrome 12"
              6: IBM 8512 color 14" or 8513 color 12"
              7: No (or other) monitor
        7  PXL LNG. Clear for 4 bits per pixel, set for 8 or more bpp.
           Only used when 3d4h index 50h bits 4-5 = 0.

42E8h W(W):  Subsystem Control Register (SUBSYS_CNTL)
bit   0-3  Interrupt Reset. Write 1 to a bit to reset the interrupt.
           Bit 0  VSY CLR   Write 1 to reset Vertical Sync interrupt.
               1  GEB CLR   Write 1 to reset Graphics Engine Busy interrupt.
               2  FIFO CLO  Write 1 to reset FIFO Overflow interrupt.
               3  FIFO CLE  Write 1 to reset FIFO Empty interrupt.
      4-7  Reserved(0)
        8  VSY ENB. Vertical Sync Interrupt Enabled if set.
        9  GE BSY.  Graphics Engine Busy Interrupt Enabled if set.
       10  FIFO-ENB OVF. FIFO Overflow Interrupt Enabled if set.
       11  FIFO-ENB EMP. FIFO Empty Interrupt Enabled if set.
    14-15  GE-RST. Graphics Engine Software Reset.
             0: no change, 1: Graphics Engine enabled, 2: reset

46E8h (W):  Video Subsystem Enable Register (SETUP_MD)
bit     3  Address Decoding (AD DEC). If clear Video I/O and Memory address
           decoding is disabled.
        4  Enable Setup (EN SUP). Set to enter Setup Mode, clear to enable
           normal operation. When in Setup Mode only the Setup Option Select
           Register at 102h is accessible.

4AE8h W(W):  Advanced Function Control Register  (ADVFUNC_CNTL)
bit     0  ENB EHFC. Enable Enhanced Functions. Set to enable enhanced
           functions using the wide pixel bus to the DAC(SID), clear to enable
           VGA display functions using the VGA pixel bus (PA0-7).
        1  Reserved(1).
        2  (911-928) SCRN SIZE - Screen Size. For enhanced modes this bit
            selects the resolution: Clear for 640x480, set for 1024x768 or
            800x600
           (864,964) ENH PL. Enhanced modes pixel length. Set for 4bits/pixel
            enhanced modes, clear for 8/15/16/24/32 bit/pixel enhanced modes
            (3d4h index 50h bits 4-5 controls the width).
        4  (928 +) LA - Enable Linear Addressing if set. This bit is ORed
             with 3d4h index 58h bit 4 so that either bit will enable Linear
             Addressing if set
        5  (928 +) MIO - Enable Memory Mapped I/O if set. This bit is ORed
             with 3d4h index 53h bit 4 so that either bit will enable Memory
             Mapped I/O if set
        6  (928 only) WP - Enable Write Posting if set. This bit is ORed
             with 3d4h index 40h bit 3 so that either bit will enable Write
             Posting if set

82E8h W(R/W):  Current Y Position Register (CUR_Y)
bit  0-11  Y Position. Y co-ordinate of current position in pixels.

86E8h W(R/W):  Current X Position Register (CUR_X)
bit  0-11  X Position. X co-ordinate of current position in pixels.

8AE8h W(R/W):  Destination Y Position & Axial Step Constant Register
               (DESTY_AXSTP)
bit  0-11  DESTINATION Y-POSITION. During BITBLT operations this is the Y
           co-ordinate of the destination in pixels.
     0-12  (911/924) LINE PARAMETER AXIAL STEP CONSTANT. During Line Drawing,
            this is the Bresenham constant 2*dminor in two's complement
            format. (dminor is the length of the line projected onto the minor
            or dependent axis).
     0-13  (80 x+) LINE PARAMETER AXIAL STEP CONSTANT. Se above

8EE8h W(R/W):  Destination X Position & Diagonal Step Constant Register
               (DESTX_DISTP)
bit  0-11  DESTINATION X-POSITION. During BITBLT operations this is the X
           co-ordinate of the destination in pixels.
     0-12  (911/924) LINE PARAMETER DIAGONAL STEP CONSTANT. During Line
            Drawing this is the Bresenham constant 2*dminor-2*dmajor in two's
            complement format. (dminor is the length of the line projected
            onto the minor or dependent axis, dmajor is the length of the line
            projected onto the major or independent axis)
     0-13  (80x +) LINE PARAMETER DIAGONAL STEP CONSTANT. Se above

92E8h W(R/W):  Line Error Term Read/Write Register (ERR_TERM).
bit  0-12  (911/924) LINE PARAMETER/ERROR TERM. For Line Drawing this is the
            Bresenham Initial Error Term 2*dminor-dmajor (one less if the
            starting X is less than the ending X) in two's complement format.
            (dminor is the length of the line projected onto the minor or
            dependent axis, dmajor is the length of the line projected onto
            the major or independent axis).
     0-13  (80x +) LINE PARAMETER/ERROR TERM. See above.

96E8h W(R/W):  Major Axis Pixel Count/Rectangle Width Register (MAJ_AXIS_PCNT)
bit  0-10  (911/924)  RECTANGLE WIDTH/LINE PARAMETER MAX. For BITBLT and
            rectangle commands this is the width of the area. For Line Drawing
            this is the Bresenham constant dmajor in two's complement format.
            (dmajor is the length of the line projected onto the major or
            independent axis). Must be positive.
     0-11  (80x +) RECTANGLE WIDTH/LINE PARAMETER MAX. See above

9AE8h W(R):  Graphics Processor Status Register (GP_STAT)
bit   0-7  Queue State.
             00h = 8 words available - queue is empty
             01h = 7 words available
             03h = 6 words available
             07h = 5 words available
             0Fh = 4 words available
             1Fh = 3 words available
             3Fh = 2 words available
             7Fh = 1 word  available
             FFh = 0 words available - queue is full
        8  (911-928) DTA AVA. Read Data Available. If set data is ready to be
            read from the PIX_TRANS register (E2E8h).
        9  HDW BSY. Hardware Graphics Processor Busy
           If set the Graphics Processor is busy.
       10  (928 +) AE. All FIFO Slots Empty. If set all FIFO slots are empty.
    11-15  (864/964) (R) Queue State bits 8-12. 1Fh if 8 words or less
            available, Fh for 9 words, 7 for 10 words, 3 for 11 words, 1 for
            12 words and 0 for 13 words available.

9AE8h W(W):  Drawing Command Register (CMD)
bit     0  (911-928) ~RD/WT. Read/Write Data. If set VRAM write operations are
            enabled. If clear operations execute normally but writes are
            disabled.
        1  PX MD. Pixel Mode. Defines the orientation of the display bitmap.
             0 = Through plane mode (Single pixel transferred at a time)
             1 = Across plane mode (Multiple pixels transferred at a time).
        2  LAST PXOF. Last Pixel Off. If set the last pixel of a line command
           (CMD_LINE, SSV or LINEAF) is not drawn. This is used for mixes such
           as XOR where drawing the same pixel twice would give the wrong
           color.
        3  DIR TYP. Direction Type.
             0: Bresenham line drawing (X-Y Axial)
                  CMD_LINE draws a line using the Bresenham algorithm as
                  specified in the DESTY_AXSTP (8AE8h), DESTX_DIASTP (8EE8h),
                  ERR_TERM (92E8h) and MAJ_AXIS_PCNT (96E8h) registers
                  INC_X, INC_Y and YMAJAXIS determines the direction.
             1: Vector line draws (Radial).
                  CMD_NOP allows drawing of Short Stroke Vectors (SSVs) by
                  writing to the Short Stroke register (9EE8h).
                  CMD_LINE draws a vector of length MAJ_AXIS_PCNT (96E8h)
                  in the direction specified by LINEDIR (bits 5-7).
                  DRWG-DIR determines the direction of the line.
        4  DRAW YES. If clear the current position is moved, but no pixels
           are modified. This bit should be set when attempting read or
           write of bitmap data.
      5-7  DRWG-DIR. Drawing Direction. When a line draw command (CMD_LINE)
           with DIR TYP=1 (Radial) is issued, these bits define the direction
           of the line counter clockwise relative to the positive X-axis.
             0 = 000 degrees
             1 = 045 degrees
             2 = 090 degrees
             3 = 135 degrees
             4 = 180 degrees
             5 = 225 degrees
             6 = 270 degrees
             7 = 315 degrees
        5  INC_X. This bit together with INC_Y determines which quadrant
           the slope of a line lies within. They also determine the
           orientation of rectangle draw commands.
           If set lines are drawn in the positive X direction (left to right).
        6  YMAJAXIS. For Bresenham line drawing commands this bit determines
           which axis is the independent or major axis. INC_X and INC_Y
           determines which quadrant the slope falls within. This bit further
           defines the slope to within an octant.
           If set Y is the major (independent) axis.
        7  INC_Y. This bit together with INC_X determines which quadrant
           the slope of a line lies within. They also determine the
           orientation of rectangle draw commands.
           If set lines are drawn in the positive Y direction (down).
        8  WAIT YES. If set the drawing engine waits for read/write of the
           PIX_TRANS register (E2E8h) for each pixel during a draw operation.
        9  (911-928) BUS SIZE. If set the PIX_TRANS register (E2E8h) is
            processed internally as two bytes in the order specified by BYTE
            SWAP. If clear all accesses to E2E8h are 8bit.
     9-10  (864,964) BUS SIZE. Select System Bus Size. Controls the width of
            the Pixel Data Transfer registers (E2E8h,E2EAh) and the memory
            mapped I/O. 0: 8bit, 1: 16bit, 2: 32bit
       12  BYTE SWAP. Affects both reads and writes of SHORT_STROKE (9EE8h)
           and PIX_TRANS (E2E8h) when 16bit=1.
           If set take low byte first, if clear take high byte first.
    13-15  Draw Command:
            0 = NOP. Used for Short Stroke Vectors.
            1 = Draw Line. If bit 3 is set the line is drawn to the angle in
                bits 5-7 and the length in the Major Axis Pixel Count register
                (96E8h), if clear the line is drawn from the Bresenham
                constants in the Axial Step Constant register(8AE8h), Diagonal
                Step Constant register (8EE8h), Line Error Term register
               (92E8h) and bits 5-7 of this register.
            2 = Rectangle Fill. The Destination X (8EE8h) and Y (8AE8h)
                registers holds the coordinates of the rectangle to fill and
                the Major Axis Pixel Count register (96E8h) holds the
                horizontal width (in pixels) fill and the Minor Axis Pixel
                Count register (BEE8h index 0) holds the height of the
                rectangle.
            6 = BitBLT. Copies the source rectangle specified by the Current X
                (86E8h) and Y (8AE8h) registers to the destination rectangle,
                specified as for the Rectangle Fills.
            7 = (80x +) Pattern Fill. The source rectangle is an 8x8 pattern
                rectangle, which is copied repeatably to the destination
                rectangle.

9EE8h W(W):  Short Stroke Vector Transfer Register (SHORT_STROKE)
bit   0-3  PIXEL-LENGTH. Length of vector projected onto the major axis.
           This is also the number of pixels drawn.
        4  DRW-MV. Set to draw the line, clear to move over it.
      5-7  DRWG DIR. The angle measured counter-clockwise from horizontal
           right) at which the line is drawn,
             0 = 000 degrees
             1 = 045 degrees
             2 = 090 degrees
             3 = 135 degrees
             4 = 180 degrees
             5 = 225 degrees
             6 = 270 degrees
             7 = 315 degrees
     8-15  The lower 8 bits are duplicated in the upper 8 bits so two
           short stroke vectors can be drawn with one command.
Note: The upper byte must be written for the SSV command to be executed.
      Thus if a byte is written to 9EE8h another byte must be written to
      9EE9h before execution starts. A single 16bit write will do.
      If only one SSV is desired the other byte can be set to 0.

A2E8h W(R/W):  Background Color Register (BKGD_COLOR)
bit   0-7  (911/924) Background Color. This is the color used for writing
            pixels where the Foreground Color Mix is selected and FSS=0, or
            the Background Color Mix is selected and BSS=0.
     0-15  (801/5) Background color. See above.
     0-31  (928 +) Background color. See above. In 32 bits per pixel modes
            there are two 16bit registers at this address. BEE8h index 0Eh bit
             4 selects which 16 bits are accessible and each access toggles to
            the other 16 bits.

A6E8h W(R/W):  Foreground Color Register (FRGD_COLOR)
bit   0-7  (911/924) Foreground Color. This is the color used for writing
            pixels where the Foreground Color Mix is selected and FSS=1, or
            the Background Color Mix is selected and BSS=1.
     0-15  (801/5) Foreground color. See above.
     0-31  (928 +) Foreground color. See above. In 32 bits per pixel modes
            there are two 16bit registers at this address. BEE8h index 0Eh bit
             4 selects which 16 bits are accessible and each access toggles to
            the other 16 bits.

AAE8h W(R/W):  Write Mask Register (WRT_MASK)
bit   0-7  (911/924) Writemask. A plane can only be modified if the
            corresponding bit is set.
     0-15  (801/5) Writemask. See above.
     0-31  (928 +) Writemask. See above. In 32 bits per pixel modes there are
            two 16bit registers at this address. BEE8h index 0Eh bit 4 selects
            which 16 bits are accessible and each access toggles to the other
            16 bits.

AEE8h W(R/W):  Read Mask Register (RD_MASK)
bit   0-7  (911/924) Read Mask affects the following commands: CMD_RECT,
            CMD_BITBLT and reading data in Across Plane Mode.
            Each bit set prevents the plane from being read.
     0-15  (801/5) Readmask. See above.
     0-31  (928 +) Readmask. See above. In 32 bits per pixel modes there are
            two 16bit registers at this address. BEE8h index 0Eh bit 4 selects
            which 16 bits are accessible and each access toggles to the other
            16 bits.

B2E8h W(R/W):  Color Compare Register (COLOR_CMP)                (not 911/924)
bit  0-15  (801/5) This is the color which is compared to the destination data
            during BitBlts. The arithmetic comparison to be used (<,>,=,true,
            false, etc..) is specified by the COLCMPO bits of the PIX_CNTL
            register. If the result of the comparison is true, the destination
            data is left unchanged.
     0-31  (928 +) See above. In 32 bits per pixel modes there are two 16bit
            registers at this address. BEE8h index 0Eh bit 4 selects which 16
            bits are accessible and each access toggles to the other 16 bits.

B6E8h W(R/W):  Background Mix Register (BKGD_MIX)
bit   0-3  Background MIX (BACKMIX).
            00  not DST
            01  0 (false)
            02  1 (true)
            03  2 DST
            04  not SRC
            05  SRC xor DST
            06  not (SRC xor DST)
            07  SRC
            08  not (SRC and DST)
            09  (not SRC) or DST
            0A  SRC or (not DST)
            0B  SRC or DST
            0C  SRC and DST
            0D  SRC and (not DST)
            0E  (not SRC) and DST
            0F  not (SRC or DST)
           DST is always the destination bitmap, bit SRC has four
           possible sources selected by the BSS bits.
      5-6  Background Source Select (BSS)
             0  BSS is Background Color
             1  BSS is Foreground Color
             2  BSS is Pixel Data from the PIX_TRANS register (E2E8h)
             3  BSS is Bitmap Data (Source data from display buffer).

BAE8h W(R/W):  Foreground Mix Register (FRGD_MIX)
bit   0-3  Foreground MIX (FOREMIX).
           Same as BACKMIX in B6E8h.
      5-6  Foreground Source Select (FSS)
             0  FSS is Background Color
             1  FSS is Foreground Color
             2  FSS is Pixel Data from the PIX_TRANS register (E2E8h)
             3  FSS is Bitmap Data (Source data from display buffer).

BEE8h W(R):  Read Register Data Register (RD_REG_DT)               (801/5,928)
bit  0-15  BEE8h index Fh bits 0-2 selects the index which is read from this
           address. Each read of this address increases the pointer so all
           indices can be read by sequential reads of this register.

BEE8h W(W):  Multifunction Control Register (MULTIFUNC_CTRL)
bit  0-11  Data.
    12-15  INDEX. indicates which Multifunction register
           will be written with the data in bits 0-11.
Note: Several registers are placed at BEE8h. When BEE8 is written
      the bits 12-15 selects the specific register to receive the write.
Note: These registers are write-only on the 911 and 924, but read/write on
      later chips.

BEE8h index 00h W(R/W): Minor Axis Pixel Count Register (MIN_AXIS_PCNT).
bit  0-10  (911/924) Rectangle Height. Height of BITBLT or rectangle command.
            Actual height is one larger.
     0-11  (80x +) Rectangle Height. See above
Note: See note above on reading BEE8h.

BEE8h index 01h W(R/W):  Top Scissors Register (SCISSORS_T).
bit  0-10  (911/924) Clipping Top Limit. Defines the upper bound of the
            Clipping Rectangle (Lowest Y coordinate).
     0-11  (80x +) Clipping Top Limit. See above
Note: See note above on reading BEE8h.

BEE8h index 02h W(R/W):  Left Scissors Registers (SCISSORS_L).
bit  0-10  (911,924) Clipping Left Limit. Defines the left bound of the
            Clipping Rectangle (Lowest X coordinate).
     0-11  (80x +) Clipping Left Limit. See above.
Note: See note above on reading BEE8h.

BEE8h index 03h W(R/W):  Bottom Scissors Register (SCISSORS_B).
bit  0-10  (911,924) Clipping Bottom Limit. Defines the bottom bound of the
            Clipping Rectangle (Highest Y coordinate).
     0-11  (80x +) Clipping Bottom Limit. See above.
Note: See note above on reading BEE8h.

BEE8h index 04h W(R/W):  Right Scissors Register (SCISSORS_R).
bit  0-10  (911,924) Clipping Right Limit. Defines the right bound of the
            Clipping Rectangle (Highest X coordinate).
     0-11  (80x +) Clipping Bottom Limit. See above.
Note: See note above on reading BEE8h.

BEE8h index 0Ah W(R/W):  Pixel Control Register (PIX_CNTL).
BIT     2  (911-928) Pack Data. If set image read data is a monochrome bitmap,
            if clear it is a bitmap of the current pixel depth
      6-7  DT-EX-DRC. Select Mix Select.
             0  Foreground Mix is always used.
             2  CPU Data determines the Mix register used.
             3  Video memory determines the Mix register used.
Note: See note above on reading BEE8h.

BEE8h index 0Dh W(R/W):  Multifunction Control Miscellaneous 2 Register
                           (MULT_MISC2)                              (864,964)
bit   0-2  DST-BASE. Destination Base. Selects the megabyte the first
           destination address is in (huh?)  0: 1st MB, 1: 2nd MB
               3: 4th Mb, 4: 5th MB, 5: 6th MB, 6: 7th MB, 7: 8th MB
           If this is >0 it will override index Eh bits 0-1
      4-6  (864,964) SRC-BASE. Source Base. Selects the megabyte the first
            source address is in (huh?).  0: 1st MB, 1: 2nd MB, 2: 3rd MB,
              3: 4th MB, 4: 5th MB, 5: 6th MB, 6: 7th MB, 7: 8th MB
           If this is >0 it will override index Eh bits 2-3

BEE8h index 0Eh W(R/W):  Multifunction Control Miscellaneous Register
                           (MULT_FUNC)                                 (80x +)
bit     0  (801/5) DEST-BA. Destination Base Address. Selects the megabyte the
             first destination address is in (huh?)  0: 1st MB, 1: 2nd MB
      0-1  (928 +) DEST-BA. See above, plus  2: 3rd MB, 3: 4th MB
        2  (801/5) SRC-BA. Source Base Address. Selects the megabyte the
             first source address is in (huh?)
               0: 1st MB, 1: 2nd MB, 2: (928) 3rd MB, 3: (928) 4th MB
      2-3  (928 +) SRC-BA. See above
        4  (928 +) RSF. Register Select Flag. In 32bits per pixel modes this
            flag determines which half of the 32bit registers (A2E8h, A6E8h,
            AAE8h, AEE8h, B2E8h) will be accessible.
              0: Lower half (bits 0-15), 1: Upper half (bits 16-31).
        5  EXT CLIP. External Clipping. If set only pixels outside the
           Clipping Rectangle are drawn, if clear only pixels inside are
           drawn.
        6  SLW RMW. Slow Read/Modify/Write Cycle. Set to use slow RMW cycles
            (4 MCLKs), clear to use fast RMW cycles (3 MCLKs).
        7  SRC NE. Source Not Equal. If set bitmap data will only be updated
            if the Color Compare register (B2E8h) is equal to the source data,
            if clear the update only happens if the register and the source
            data differ. If bit 8 is clear the bitmap data will always be
            updated.
        8  Enable Color Compare. If set enables Color Comparison.
        9  (864/964) CMR 32B. Select 32-Bit Command Registers. If set the
           command registers (A2E8h, A6E8h, AAE8h, AEE8h and B2E8h) are 32bit
           byte and word access won't work, if clear they are 16bit.

BEE8h index 0Fh W(W):  Read Register Select Register (READ_SEL)    (801/5,928)
bit   0-2  (911-928) READ-REG-SEL. Read Register Select. Selects the register
            that is actually read when a read of BEE8h happens. Each read of
            BEE8h increments this register by one.
             0: Read will return contents of BEE8h index 0.
             1: Read will return contents of BEE8h index 1.
             2: Read will return contents of BEE8h index 2.
             3: Read will return contents of BEE8h index 3.
             4: Read will return contents of BEE8h index 4.
             5: Read will return contents of BEE8h index 0Ah.
             6: Read will return contents of BEE8h index 0Eh.
             7: Read will return contents of 9AE8h (Bits 13-15 will be 0).
      0-3  (864,964) READ-REG-SEL. See above plus:
             8: Read will return contents of 42E8h (Bits 12-15 will be 0)
             9: Read will return contents of 46E8h
            10: Read will return contents of BEE8h index 0Dh

E2E8h W(R/W):  Pixel Data Transfer Register (PIX_TRANS)
bit  0-15  Data can be read from or written to the display buffer.
           In through plane mode (PLANAR=0), bits 0-7 and 8-15 map onto
           bit planes 0-7 of an individual pixel.
           In across plane mode (PLANAR=1) bits 0-4 and 8-12 map onto pixels
           0-4 within a nugget (1 bit per pixel).
Note: Write only on the 864,964 ??

E2EAh W(R/W):  Pixel Data Transfer Register (PIX_TRANS)                (80x +)
bit  0-15  This is an extension of E2E8h for 32bit transfers.
Note: Write only on the 864,964 ??


ELSA EEProm data structures:

 WORD:  Bit:
  00h   0-15   CRC of entire EEProm image
  01h   0-15   Always 3353h ('S3')
  02h   0-15   Board code:
                 910h  ELSA Winner 1000
                 912h  ELSA Winner 1000 VESA Local Bus
                 914h  ELSA Winner 1000 PCI
                 91Ah  ELSA Winner 1000 ISA
                 920h  ELSA Winner 2000
                 922h  ELSA Winner 2000 VESA Local Bus
                 924h  ELSA Winner 2000 PCI
                 930h  ELSA Winner 1000 Pro
                 940h  ELSA Winner 2000 Pro
  03h   0-15   Serial Number, lower 16bits
  04h   0-15   Serial Number, upper 16bits
  05h   0-15   Size (in words) of the EEProm structure
  06h          Hardware Configuration
  07h   0-15   Max Pixel Clock in units of 4KHz
  08h   0-15   Max Memory Clock in units of 4KHz
  09h          Vmode0
  0Ah          Key Word
  0Bh   0-15   Monitor Horizontal Size in mm
  0Ch   0-15   Monitor Vertical Size in mm
  0Dh          Software Version
 0Eh-19h       Reserved

    Mode information, one record per mode:
  00h  10-15   Bits per Pixel (bpp)
         0-9   Horizontal Resolution in units of 4 pixels
  01h  12-15   Flags
        0-11   Vertical Resolution i scanlines
  02h   0-15   Pixel Frequency in units of 4KHz
  03h   0-11   Horizontal Total
       12-15   Horizontal Front Porch bit 6-9
  04h  10-15   Horizontal Front Porch bit 0-5
         0-9   Horizontal Sync Width
  05h   0-11   Vertical Total in scanlines
       12-15   Vertical Front Porch bit 6-11
  06h  10-15   Vertical Front Porch bit 0-5
         0-9   Vertical Sync Width
  07h          Reserved
  08h          Reserved



   PCI Configuration Registers

PCI 00h W(R):  Vendor ID
bit 0-15  5333h ('S3').

PCI 02h W(R):  Device ID
bit 0-15  88C0h for 864, 88D0h for 964. For 764 and later chips probably 3d4h
          index 2Dh in the high byte and 3d4h index 2Eh in the low byte.

PCI 04h W(R/W):  Command
bit    0  I/O. Response to I/O Accesses enabled if set
       1  MEM. Response to Memory Accesses enabled if set.
       5  DAC RSP. No Response to RAMDAC Register Access. If set there is no
          access to the RAMDAC registers.

PCI 06h W(R):  Status
bit 9-10  DEVSEL. Device Select Timing. 1: Medium /DEVSEL timing.

PCI 08h (R):  Revision ID
bit  0-7  Revision level. Probably 3d4h index 2Fh for 764 and later chips.

PCI 0Ah (R/W):  Programming Interface
bit    0  VGA. Set as we supports the VGA interface

PCI 10h D(R/W):  Base Address 0
bit    0  (R) MSI. Memory Space Indicator. 0 as it is Memory Mapped.
     1-2  (R) TYPE. Type of Address Relocation. 0 as we can locate anywhere in
               32bit address space
       3  (R) PREF. Prefetchable. 0 as the memory is non-cachable.
   23-31  BASE ADDRESS0.  Upper 9 bits of the memory address. See 3d4h index
           59h for details. Updates should be done to this register.

PCI 30h D(R/W):  BIOS ROM Base Address
bit    0  ADE. Address Decode Enable. Set to access the BIOS ROM at the
          address defined here.
   16-31  BIOS ROM BASE ADDRESS. Upper 16bits of the BIOS ROM base address


  ID S3 chip:

  wrinx(base,$38,0);    {disable extensions}
  if not testinx2(base,$35,$F) then
  begin
    wrinx(base,$38,$48);
    if testinx2(base,$35,$F) then
    begin
      __S3__
      case rdinx(base,$30) of
       $81:86c911
       $82:86c911A or 86c924
       $90:86c928 C
       $91:86c928 D
   $94,$95:86c928 E
       $A0:86c801/5 A or B
  $A2..$A4:86c801/5 C
       $A5:86c801/5 D
       $B0:86c928 PCI
      end;
    end;
  end;


  Video Modes (Diamond Stealth):
       VESA:
  54h        T   132   43   16
  55h        T   132   25   16
       101h  G   640  480  256  P8
  6Ah  102h  G   800  600   16  PL4
       103h  G   800  600  256  P8
       104h  G  1024  768   16  PL4
       205h  G  1024  768  256  P8
       206h  G  1280  960   16  PK4
       208h  G  1280 1024   16  PK4
       211h  G   640  480  64K  P16     Stealth 24 only
       212h  G   640  480  16M  P24     Stealth 24 only
       301h  G   640  480  32k  P15     HiColor '911/'924 cards
       106h  G  1280 1024   16  PL4
       107h  G  1280 1024  256  P8
             Remaining modes not on '911 and '924 cards
             Note the 16m color modes are type P24 on 801/5's and P32 on 928's
       110h  G   640  480  32k  P15
       111h  G   640  480  64k  P16
       112h  G   640  480  16m  P32    This is a P24 mode
       113h  G   800  600  32k  P15
       114h  G   800  600  64k  P16
       115h  G   800  600  16m  P32
       116h  G  1024  768  32k  P15
       117h  G  1024  768  64k  P16
       118h  G  1024  768  16m  P32
       119h  G  1280 1024  32k  P15
       11Ah  G  1280 1024  64k  P16
  45h        G  1600 1200  256  P8      STB Pegasus
       126h  G  1152  864       P16     Number 9
       127h  G  1152  864       P32     Number 9

----------101DAA-------------------------------
INT 10 - VIDEO - Diamond Stealth - Check for Stealth
        AX = 1DAAh
        BX = FDECh
Return: AL = 01h  For Stealth VRAM
             02h  For Stealth 24
        AH = DACtype:
               00h  Standard VGA DAC
               11h  Highcolor DAC where bit 3 of the command register is
                    not writable.
               23h  SS2410 DAC
               33h  Highcolor DAC without RS2 decoding
               43h  Highcolor DAC with RS2 decoding
        SI:DI -> BIOS version & Copyright string
----------101DAA-------------------------------
INT 10 - VIDEO - Diamond Stealth 64
        AX = 1DAAh
        BX = FDECh
Return: BX = CEDFh For Stealth64
     SI:DI -> BIOS message
        AL = Amount of memory
               01h  for 1Mb
               02h  for 2Mb
               04h  for 4Mb
        AH = DAC Type
             Bit 0-3  DAC Type. 0: Normal, 1: Sierra, 2: Diamond SS24,
                       3: Bt485 (135MHz), 4: STG1700, 5: STG1702,
                       6: AT&T 20c49x, 7: STG1703, 8: S3 SDAC,
                       9: Bt485 (175MHz)
                   4  Bus type. 0: VESA VLB, 1: PCI
----------104FFF-----------------------------------
INT 10 - VIDEO - S3                 - SET/RESET DUAL DISPLAY MODE
        AX = 4FFFh
        BX = Dual display mode
              00h  Reset
              01h  Set dual display, 32KB VGA test
              02h  Set dual display, 64KB VGA test
Return: AX = 4F00h if successful
        BX = number of scanlines off screen for test mode
----------107F-------------------------------------
INT 10 - VIDEO - Diamond Stealth/Stealth 24 - SET TEXT MODE
        AH = 7Fh
        BH = 00h  Set Color text mode
             01h  Set Color text mode
             02h  Set Monochrome text mode
Note: Actually only bit 0-1 of BH are tested.
----------107F00-4000------------------------------
INT 10 - VIDEO - S3 80x/928 - GET S3 INFORMATION BLOCK
        AX = 7F00h
        BX = 4000h
Return: AX = 007Fh if supported
        DX:BX -> DAC set mode rutine
Note: Might be implemented in Diamond Stealth 24 with BIOS version > 3.33
----------107F00-4001------------------------------
INT 10 - VIDEO - S3 80x/928 - GET LINEAR ADDRESS
        AX = 7F00h
        BX = 4001h
Return: AX = 007Fh if supported
        CX = current linear address base (high word)
Note: Might be implemented in Diamond Stealth 24 with BIOS version > 3.33
----------107F00-4002------------------------------
INT 10 - VIDEO - S3 80x/928 - SET LINEAR ADDRESS
        AX = 7F00h
        BX = 4002h
        CX = new linear address base (high word)
Return: AX = 007Fh if supported
Note: Might be implemented in Diamond Stealth 24 with BIOS version > 3.33
