ATI.TXT

   ATI Technologies Super VGA Chip Sets.

    Board           18810 Dot    ROM BIOS
    Version   Chip  Clock Chip   Label
      V3   18800      no          V3M
      V4   18800-1    no          V4M     
      V5   18800-1    yes         V5M   
      V6   28800-2                      VGA Wonder+
      V7   28800-4                      VGA Wonder XL
           28800-5                      VGA Graphics/Ultra (VGA chip)
       ?   38800-1                      Mach 8.  8514/Ultra and Graphics/Ultra
                                                 (8514/A chip)
           68800                        Mach 32. Graphics Ultra Pro/+
                                                 Combined 8514/A and VGA chip.

Support chips:
ATI18810  Clock chip for 18800-1, 28800
ATI18811  Clock chip for 68800

    ATI Prism Elite uses Trident 8800CS chips.

    ATI VGA Wonder XL can use the Sierra HiColor RAMDAC.

Note that the base register for the ATI extended registers should be read from
the word at 0C000h:10h, as ATI reserves the right to change the base address.
However all current implementations use 1CEh.


1CEh index A0h (R/W):  ATI Register 00h                               (28800+)
bit  0-3  Reserved
       4  Enable 16bit ROM
     5-7  Reserved

1CEh index A1h (R/W):  ATI Register 01h                               (28800+)
bit  0-2  Reserved
     3-4  Digital Monitor Detection
     5-7  Reserved

1CEh index A2h (R/W):  ATI Register 02h                               (28800+)
bit  0-7  Reserved

1CEh index A3h (R/W):  ATI Register 03h                               (28800+)
bit 0-2  16bit ROM access
      3  Cursor Start Address bit 17
      4  Display start address bit 17
    5-7  Reserved

1CEh index A4h (R/W):  ATI Register 04h                               (28800+)
bit  0-3  ROM page 0
     4-7  ROM page 1

1CEh index A5h (R/W):  ATI Register 05h                               (28800+)
bit  0-3  ROM page 2
     4-7  ROM page 3

1CEh index A6h (R/W):  ATI Register 06h                               (28800+)
bit  0-6  Reserved
       7  Forced read 3CCh

1CEh index A7h (R/W):  ATI Register 07h                               (28800+)
bit    0  Enable True color mode
     1,3  True Color DAC installed
       2  Reserved
     4-5  Forced pixel data to high
       6  Skew display enable
       7  Enable divide by 3 clock

1CEh index A8h (R/W):  ATI Register 08h                            (28800-5 +)
bit  0-7  Reserved

1CEh index A9h (R/W):  ATI Register 09h                            (28800-5 +)
bit  0-1  Vertical Line Counter bit 8-9
     2-7  Reserved

1CEh index AAh (R/W):  ATI Register 0Ah                            (28800-5 +)
bit  0-3  (R?) Chip Revision ID
       4  Address/Data bus configuration
     5-7  Reserved

1CEh index ABh (R/W):  ATI Register 0Bh                               (28800+)
bit    0  Enable zero wait state support for video memory write
       1  Enable zero wait state for BIOS read
       2  Reserved
       3  Select secondary display
       4  (28800-6 +)  Lock DAC write
       5  (28800-6 +)  Zero wait state enable
       6  Restrict CPU access
       7  Delay internal latching

1CEh index ACh (R/W):  ATI Register 0Ch                            (28800-6 +)
bit    0  Enable Linear Addressing
     1-5  Reserved
       6  Enable 1024x768x16 color planar pass through internal palette
       7  Reserved

1CEh index ADh (R/W):  ATI Register 0Dh                            (28800-6 +)
bit    0  Extended Horizontal Total
       1  Extended CRTC Start Blanking
       2  (28800-6) Extended CRTC Horizontal Retrace
          (Mach 32) Display Start Address bit 18.
       3  Extended CRTC Registers Enable
     4-7  Reserved

1CEh index AEh (R/W):  ATI Register 0Eh
bit  0-1  (Mach 32) Write/Single bank bit 4-5
     2-3  (Mach 32) Read bank bit 4-5

1CEh index AFh (R/W):  ATI Register 0Fh
bit  0-7  Reserved

1CEh index B0h (R/W):  ATI Register 10h
bit    0  Reserved
       1  (188xx) Enable 256 color modes
          (28800 +) Enable alt Video mem organization in text modes
       2  (188xx) Enable 256 color modes
          (28800 +) Extended Cursor Start Address
       3  (188xx) Enable 8 CRT accesses for each CPU access
     3-4  (28800-4 +)  Video memory: 0=256k, 1=1M, 2=512K
       4  (28800-2)  Video memory: 0=256k, 1=512k
       5  (28800 +) Enable 256 color modes if set
       6  (28800 +) Display Start Address bit 16
     6-7  (188xx) Display Start Address bit 16-17

1CEh index B1h (R/W):  EGA Compatibility and Double Scanning Enable
bit    0  Force all I/O addresses to be EGA compatible if set
       1  Force all registers to be EGA compatible if set
       2  General purpose read/write
     3-5  Double scanning/3 of 4 scanning enable
            1: Enable double scanning in graphics mode
            2: Enable 3 of 4 scanning in graphics mode
            5: Enable double scanning in text mode
            6: Enable 3 of 4 scanning in text mode
       6  Divide vertical timing parameters by 2 if set
       7  Reserved

1CEh index B2h (R/W):  Memory Page Select
bit    0  (18800) Enable interlace if set
          (18800-1) reserved
          (28800 +) Read bank no bit 3
     1-3  (18800-1) Write/Single bank no.
     1-4  (28800 +) Write/Single bank no
          (18800) Bank no. in 64 chunks
       5  (18800) Enable internal DIP switch settings (EGA mode)
       6  (18800) External clock select. If set 3C2h bits 2-3 selects from
                  (44.9 MHz, 50.175, , 36) rather than (50.175MHz,
                  56.644,, 44.9)
       7  (18800) Reserved
     5-7  (18800-1 +) Read bank no

1CEh index B3h (R/W):  ATI Register 13h
bit    0  EEPROM data input
       1  EEPROM clock source
       2  Enable EEPROM interface
       3  EEPROM chip select
       4  (18800?)  Enable PS/2 decoding
          (18800-1) Disable memory beyond 256K
       5  (28800 +) XOR with input status bit HSYNC to select 8 or 16 bit
                    video memory operation
       6  (18800) Enable 1 CRT access to 1 CPU access
          (18800-1 +)  Enable 1024x768 16 color planar pixel mode
       7  Enable double scanning for 200 line modes
Note: This register should not be modified on revision 1 chips.

1CEh index B4h (R/W):  Emulation Control
bit    0  Enable CGA emulation if set
       1  Enable Hercules emulation if set
       2  Write Protect CR90-94,CR97
       3  Write Protect all vertical timing registers if set
       4  Write Protect cursor start and end if set
       5  Write Protect CR80-86 and CR140-144
       6  Write Protect CR0-7 instead of CR117
       7  Override locking of CR117

1CEh index B5h (R/W):  ATI Register 15h
bit    0  Select display enable as blanking signal
       1  Invert blanking signal polarity
       2  Enable display signal skew
       3  Select Map 3 as programmable character generator
       4  (18800-1 +) Enable 8 simultaneous fonts if set
                      Background is then always 0, and bit 4-7 of an
                      attribute selects the font.
       5  Disable Cursor Blinking if set
       6  Enable CGA Cursor Emulation if set
          Adds 5 to the cursor start and end registers.
       7  Select undivided input clock as pixel clock

1CEh index B6h (R/W):  High Resolution Enable
bit    0  (28800-4 +) Set to enable display to cross the 256K limit
                      (512K in 256color modes).
       1  Enable 640x400 Hercules emulation
       2  Enable linear addressing in 256color modes
       3  Select 4 color high res modes
       4  Select 16 color high res modes
       5  Enable vertical interrupts
       6  (18800 - 28800-3) Enable linear addressing
          (?) Select composite sync for output
       7  Disable blanking screen blank in CGA and Hercules emulation

1CEh index B7h (R/W):  ATI Register 17h
bit    0  16bit operation if set, 8bit if clear
       1  PS/2 configuration
       2  Video memory is DRAM if set, VRAM if clear
       3  EEPROM data
       4  Status of ROM address decode
       5  Select I/O address at 3xxh or 2xxh
     6-7  Reserved

1CEh index B8h (R/W):  Write Protect and Clock Select
bit    0  Lock Palette registers in Attribute Controller if set
       1  Lock Overscan register in Attribute Controller if set
       2  Lock All VGA registers except CRTC start and end if set
       3  Lock write to 3C2h if set
       4  Lock horizontal sync polarity if set
       5  Lock vertical sync polarity if set
     6-7  Clock divider. Divide Video Clock by: 0: 1, 1: 2, 2: 3, 3: 4

1CEh index B9h (R/W):  ATI Register 19h
bit    0  Clock select
       1  (18800-1 +) Select input to clock chip. See index BEh bit 4
     2-3  ROM address space.
            0: 32k at C000h, 1: 28k at C000h, 2,3: 24k at C000h
     4-5  Wait cycles for 16 bit ROM access:
            0: 8 cycles, 1: 4 cycles, 2: 2 cycles, 3: none
       6  (?) Set horizontal total = register value +2 (vs +5)
          (?) I/O operations are 16bits if set, 8 if clear
       7  Lock Line Compare register

1CEh index BAh (R/W):  ATI Register 1Ah
bit  0-2  Delay chain timing compensation for TTL monitors and 16color RGB
          simulation
       3  Disable secondary Red output (for RGB monitors)
       4  Enable EGA color simulation for RGB monitors
       5  Enable monochrome grey scale circuit
       6  reserved
       7  Delay chain resolution compensation

1CEh index BBh (R/W):  Input Status Register
bit  0-3  Monitor Type:
            0: EGA
            1: PS/2 Analog Monochrome
            2: TTL Monochrome
            3: PS/2 Color
            4: RGB Color
            5: MultiSync
            7: PS/2 8514
            8: Seiko 1430
            9: NEC Multisync 2A
            A: Crystalscan 860/Tatung 1439
            B: NEC Multisync 3D
            C: TVM 3M
            D: NEC MultiSync XL
            E: TVM 2A
            F: TVM 3A
       4  (188xx) General read/write bit
          (28800 +) Bit 4 of the Monitor Type above
       5  (188xx) Video memory is 512Kbytes if set, 256K else
     6-7  Reserved

1CEh index BCh (R/W):  ATI Register 1Ch
bit  0-7  reserved

1CEh index BDh (R/W):  EGA Switch Settings
bit    0  Invert Composite Sync Polarity
       2  (28800-5) 128K CPU address
     4-7  EGA switch settings

1CEh index BEh (R/W):  ATI Register E                              (not 18800)
bit    0  Unlock Vertical Display End register of the CRT Controller
       1  Enable interlace mode
       2  Select internal EGA DIP switch value
       3  Dual bank mode if set, single else
       4  (18800-1 without 18810 Clock Chip (V4)) External clock select.
              If set 3C2h bits 2-3 selects from (44.9 MHz, 50.175, ,
              36) rather than (50.175MHz, 56.644, , 44.9)
       4  (18800-1 with 18810 ClockChip, 28800 +) Clock Select
              BEh bit 4: B9h bit 1: 3C2h bit 3: 3C2h bit 2:   Frequency:
                  0          0          0           0           42.954 MHz
                  0          0          0           1           48.771
                  0          0          1           0           Ext 0 (16.657)
                  0          0          1           1           36.000
                  0          1          0           0           50.350
                  0          1          0           1           56.640
                  0          1          1           0           Ext 1 (28.322)
                  0          1          1           1           44.900
                  1          0          0           0           30.240
                  1          0          0           1           32.000
                  1          0          1           0           37.500
                  1          0          1           1           39.000
                  1          1          0           0           40.000
                  1          1          0           1           56.644
                  1          1          1           0           75.000
                  1          1          1           1           65.000
       6  Enable 1024x768 16 color mode
       7  Enable 1024x768 4 color mode

1CEh index BFh (R/W):  Miscellaneous Register
bit    0  ??
       6  ROM page address bit
       7  Alternate memory organisation for graphics enable

3C0h (R/W):  Palette index register
bit 4-5  Mode 67h Palette
         Value   Pixel=0    1      2         3
          0       Black  White  Grey      Bright White
          1       Black  Green  Red       Yellow
          2       Black  Cyan   Red       White
          3       Black  Cyan   Magenta   White

Note:  The ATI chips handles the indexed registers slightly differently
       from other VGA chips, as the index register must be written before
       each read or write of the associated data register.

0AEEh W(R/W):                                                   (Mach 32 only)
bit 0-15  Lower bits of the address (in DWORDs) of the cursor map in video
          memory. The upper bits are in 0EEEh. The cursor map is a 64x64 pixel
          map with two bits per pixel.

0EEEh W(R/W):                                                   (Mach 32 only)
bit 0-14  Upper bits of the address of the cursor map. Low bits are in 0AEEh.
      15  Set to enable the Hardware Cursor

12EEh W(R):                                                     (Mach 32 only)
bit    0  If set the VGA is enabled.
     1-3  Bustype: 0: ISA, 1:EISA, 2:MCA, 3: MCA32, 4: Local Bus 386SX,
           5: Local Bus 386, 6: Local Bus 486
     4-6  Memory: 0: DRAM x4, 1: VRAM x4, 3: DRAM x16
    9-11  DAC: 0: ATI 68830, 1: ATT20c491, 2: ATI 68875, 3: Bt476, 4: Bt481,
           5: ATI 68860

12EE W(W):                                                      (Mach 32 only)
bit 0-15  Cursor X-position relative to the address in 2AEEh & 2EEEh

16EE W(W?):                                                     (Mach 32 only)
bit 0-15  Cursor Y-position relative to the address in 2AEEh & 2EEEh

1AEEh W(R/W):                                                   (Mach 32 only)
bit  0-7  Cursor Color FG ?
    8-15  Cursor Color BG ?

1EEEh (R/W):                                                    (Mach 32 only)
bit  0-5  First horizontal pixel actually used within the 64x64 cursor map.

1EEFh (R/W):                                                    (Mach 32 only)
     0-5  Number of lines shown in the cursor

2AEEh W(R/W):  Cursor Position Low                              (Mach 32 only)
bit 0-15  Lower bits of the address of the cursor in DWORDs, calculated as:
           [(Y position)*(bytes per scanline)+(X pos)*(bytes per pixel)]/4
          The upper bits are in 2EEEh. This co-ordinates used in this
          calculation must be modulo 8 and <= the actual position. The values
          in 12EEh and 16EEh are added to give the actual cursor position.

2EEEh W(R/W):  Cursor Position High                             (Mach 32 only)
bit 0-15  Upper bits of the address of the cursor. Lower bits are in 2AEEh.

36EEh (R/W):                                                    (Mach 32 only)
bit  2-3  Memory: 0: 512K, 1: 1MB, 2: 2MB, 3: 4MB

52EEh (R/W):                                                    (Mach 32 only)
bit  0-6  ROM address: 0: C000h, 1: C080h, 2: C100h ...
       7

5EEEh W(R/W):                                                   (Mach 32 only)
bit  0-1  Aperture: 0: Disabled, 1: 1MB, 2: 4MB
    8-15  Aperture address

9AEEh (R/W):                                                    (Mach 32 only)
bit    0  Set if busy ?



Bank Switching

  Bank switching can use either one single bank register or two
  separate read and write bank registers (18800-2 and 28800 Only).
  Banks map to 64k boundaries.

Reserved locations:

  $C000:$10   2 bytes   ATI Register (usually $1CE).
  $C000:$31   9 bytes   '761295520' ID's ATI product
  $C000:$40   2 bytes   '31' ID's ATI Super VGA
                        '32' = ATI EGA Wonder 800+
                        '22' = ATI EGA Wonder
                       ?+'3' = ATI Basic-16
  $C000:$42   1 byte    Bit 0  Set for 16-bit boards
                            1  Mouseport present if set
                            2  Non-interlace if set
                            3  Microchannel if set, PC/AT else
                            4  Use clock chip if set
                            7  Use C000:0000 to D000:FFFF with 16 bit ROM
                               if set
  $C000:$43   1 byte    Gate revision. 
                           '1' = 18800   (V3),
                           '2' = 18800-1 (V4/V5),
                           '3' = 28800-2 (V6).
                           '4' = 28800-4  VGA Wonder+
                           '5' = 28800-5  VGA Wonder XL
                           'a' = 68800   Mach-32
                        Note: Types '6' and 'c' have been reported
  $C000:$44   1 byte    Bit 0  If clear the board can support 70Hz 
                               non-interlaced refresh 
                            1  If set the board supports Korean characters
                               in VGA mode 
                            2  If set the board uses 45MHz memory clock
                            3  If set the board supports zero wait states.
                            4  If set the board uses paged ROMs.
                            6  If clear there is 8514/A hardware on board
                               (Graphics Ultra)
                            7  If set there is a 32K color DAC on board. 
  $C000:$4C   1 byte    Major Bios version
  $C000:$4D   1 byte    Minor Bios version




  ID ATI Super VGA Chip Set

  if (getbios($31,9)='761295520') and (getbios($40,2)='31') then
  begin
    {ATI_Super_VGA}
    case mem[$C000:$43] of
      $31: ATI 18800;
      $32: ATI 18800-1;
      $33: ATI 28800-2;
      $34: ATI 28800-4;
      $35: ATI 28800-5;
      $61: ATI Graphics Ultra Pro;
    else unknown_ATI
    end
  end;
 


  Video Modes:
    23h  T   132   25  16  (8x14)
    27h  T   132   25   2  (8x14)
    33h  T   132   44  16  (8x8)
    37h  T   132   44   2  (8x8)
    51h  G   640  480  16  PL4      ATI EGA Wonder only
    52h  G   752  410  16  PL4      ATI EGA Wonder only
    53h  G   800  560  16  PL4
    54h  G   800  600  16  PL4
    55h  G  1024  768  16  PL4      (V4 or later)
    58h  T    80   33  16  (8x8)
    5Bh  T    80   30      (8x16)
    61h  G   640  400 256  P8
    62h  G   640  480 256  P8
    63h  G   800  600 256  P8
    64h  G  1024  768 256  P8       V6 (VGA Wonder +) or later
    65h  G  1024  768  16  P4       ****  See note
    67h  G  1024  768   4  PL2E     ****  See note
    6Ah  G   800  600  16  PL4      Undocumented ??
    72h  G   640  480 32k  P15      V7 (XL) only
    73h  G   800  600 32k  P15      V7 (XL) only
    75h  G   640  480 16m  P24      XL24 only

Note: ATI Prism Elite uses a Trident chip and Trident mode numbers.

    ATI enhanced Graphics modes do NOT support INT 10h with AH=
      01h..0Eh or 11h or 13h.


    Mode 65h  1024x768 16 color
      4 bits per pixel packed mode
      Even pixel is in bits 0-3 of the byte, odd in bits 4-7.

    Mode 67h  1024x768  4 color
      2 bits per pixel planar mode
      Even pixels are in plane 2&3, odd pixels in plane 0&1.


  BIOS extensions:

----------1012--BH55-------------------------
INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES
        AH = 12h
        BH = 55h
        BL = subfunction
              00h disabled enhanced features
              01h enable enhanced features
              02h get status
Return:           AL = status flags
                       bit    3  set if enhanced features enabled
                       bits 7-5  monitor type
                                 000 PS/2 mono
                                 001 PS/2 color
                                 010 multi-sync
                                 011 Taxan 650 25kHz
                                 100 RGB
                                 101 mono
                                 110 EGA
                                 111 Compaq internal
              03h disable register trapping (CGA emulation)
              04h enable register trapping
              05h program mode described by table at ES:BP
              06h get mode table
                  AL = video mode
                  BP = FFFFh  (Known illegal value).
                  SI = 0000h  (Known illegal value).
Return:           ES:BP -> table suitable for mode AL (and subfnc BL=05h)
                  BP = FFFFh on error

Format of ATI VGA Wonder video mode table:
Offset  Size     Description
 00h    BYTE     number of columns
 01h    BYTE     maximum row (number of rows - 1)
 02h    BYTE     scan lines per row
 03h    WORD     video buffer size in bytes
 05h   4 BYTEs   values for Sequencer registers 1-4
 09h    BYTE     value for Miscellaneous Output register
 0Ah   25 BYTEs  values for CRTC registers 00h-18h
                  00h horizontal total size (chars)
                  01h horizontal displayed (chars)
                  02h horizontal sync position (chars)
                  03h horizontal sync width (chars)
                  04h vertical total size (char rows)
                  05h vertical total adjust (scan lines)
                  06h vertical displayed (char rows)
                  07h vertical sync position (char rows)
                  08h interlace mode
                  09h max scan line in row
                  0Ah cursor start scan line
                  0Bh cursor end scan line
                  0Ch screen memory start (high)
                  0Dh screen memory start (low)
                  0Eh cursor address (high)
                  0Fh cursor address (low)
                  10h light pen (high)
                  11h light pen (low)
 23h   20 BYTEs  default palette (values for Attribute Controller regs
                 00h-13h)
 37h   9 BYTEs   values for Graphics Controller registers 00h-08h