Avance Logic ALG Graphics Accelerator

The ALG chips are VGA controllers with built in graphics coprocessor (COP).
The ALG chips only works in AT and better systems as they uses 16 bit I/O
 addresses.

ALG2101  160pin  2Mb, 1280x1024x256c, 800x600x64k
ALG2201  160pin  As 2101, but supports 24bit color
ALG2228  160pin  2MB, 1280x1024x256c, 1024x768x32k/64k, 800x600x16m
ALG2301  160pin  PCI version of ALG2228
ALG2302
ALG2064  64bit memory bus, integrates 24bit DAC & dual clock generator and
         on-chip 32K ROM


Support chips:


ALG1101   16bit DAC, controlled via I/O pin
ALG1201   15/16/24bit DAC
ALG1301   As 1201, but with video functions
ALG3102   Clock chip. Supplies 50.35, 56.6, 44.6, 72.2, 74.9, 65.1, 84.7,
                  79.4, 25.175, 28.3, 44.6, 36.1, 57.1, 63.3, 49.9, 39.7


3C0h index 15h (R/W):  Cursor Foreground
bit  0-7  The HW cursor foreground color

3C0h index 16h (R/W):  Cursor Background
bit  0-7  The HW cursor background color
Note: When updating index 15h and 16h it may be necessary to explicitly
      preserve index 11h and 12h.

3CEh index 09h (R/W):  Planar Pixel Index Register
bit  0-2  Planar Pixel Index. Selects the pixel within the CPU Latch to be
          read at 3CEh index 0Ah.

3CEh index 0Ah (R/W):  Planar Pixel Register
bit  0-3  Planar Pixel Data. A planar pixel can be read by:
            Reading the video memory address containing the pixel, thus
            loading the CPU latches.
            Setting index 9 to the pixel number (0-7) within the byte.
            Reading this register.

3CEh index 0Bh (R/W):  Extended Function Register 1
bit  0-1  Video Clock Division Control. Divides the video clock by:
            (2101) 0: pass through, 1: 1.5, 2: 2, 3: 4
            (2228) 0: pass through, 1: 2, 2: 4, 3: 4
       2  DRAM Clock Select. If set the DRAM clock is selected from the video
          clocks, if clear from SCLK. Only valid if 3CEh index 0Ch bit 6 is
          set.
     3-5  ??
     6-7  DRAM Clock Division Control. Divides the DRAM clock by:
            0: pass through, 1: 1.5, 2: 2, 3: 4

3CEh index 0Ch (R/W):  Extended Function Register 2
bit    0  Vertical Retrace Interrupt Polarity Control. If set the Vertical
          Retrace Interrupt is active low, if clear active high.
       1  16-bit Video Memory Access Enable. Set if access to video memory is
          8bit, clear if 16bit.
       2  16-bit BIOS ROM Access Enable. Set if access to the BIOS ROM is
          8bit, clear if 16bit.
       3  Building Character. If set enables patterned writes where the CPU
          data is interpreted as a pattern (Color Expansion). 8 pixels are
          written at a time. '1' bits in the pattern cause the pixel to be set
          to the foreground color (3CEh index 0Dh) and '0' bits the background
          color (3CEh index 0Eh).
       4  8Maps Enable. (Packed modes only) If set 8maps are chained together
          rather than the normal 4 (Chain4). If set the Display Start Address
          (3d4h index Ch-Dh + 20h) and the Offset (3D4h index 13h) are in
          units of 8 bytes. If clear in units of 4 bytes and the pixels are
          doubled on the screen (Mode 13h).
       5  Clock Select 2. Bits 0-1 are in 3C2h/3CCh bits 2-3
       6  SCLK Selection Enable. If set enables 3CEh index 0Bh bit 2
       7  If set turns display off ?

3CEh index 0Dh (R/W):  Foreground Color Register
bit  0-7  Used as foreground color in Color Expansion and fill color by the
          Coprocessor. In planar modes only bits 0-3 are used.

3CEh index 0Eh (R(W):  Background Color Register
bit  0-7  Used as foreground color in Color Expansion and by the Coprocessor.
          In planar modes only bits 0-3 are used.

3CEh index 0Fh (R/W):  Extended Function Register 3
bit    0  Polarity Control of CPU Latch Output to Function Block. If set the
          output from the CPU Latch is inverted.
       1  Polarity Control of Function Block output to Bit Mask Block. If set
          the output from the Function Block is inverted
       2  Set to enable the Read bank.
       3  Address Mapping Control. If set 1MB of video memory can be mapped to
          any 1MB bank in the first 16MB ?
       4  ??
       5  (2201 +)
     6-7  ??

3CEh index 10h (R/W):                                                   (2201+)
bit  0-7  ??

3CEh index 11h (R/W):                                                   (2201+)
bit  0-7  ??

3CEh index 1Fh (R/W):  Character ROM Extended Address Register           (2101)
bit  0-1  ??
       2  (2101 only) Clock Select 3. Bits 0-1 are in 3C2h/3CCh bits 2-3 and
            bit 2 in 3CEh index 0Ch bit 6
     3-7  ??

3d4h index 19h (R/W):  CRTC Extended Registers 1
bit    0  Interlace Control. Set in interlaced modes. In interlaced modes the
          CRTC offset (3d4h index 13h) is for two scan lines.
       1  High Resolution Address Support in Chain 4 Mode. If set MA14 and
          MA15 wraps around, if clear MA12 and MA13 wraps around.
          Should be set enables access to video memory above 256K.
       2  Clock Lock. If set disables writes to 3C2h bits 2,3,6,7.
       3  CRTC Timing Lock. If set disables writes to the CRTC timing
          registers.
       4  New Address Scheme. If set the CRTC uses non-wrapped addresses and
          shifts them 0-2 bits left depending on sequencer mode.
          SEt in HiColor modes, but does not controll the DAC mode.
       5  Vertical Retrace Edge Control to load line address
       6  VREB4. Bit 4 of the Vertical Retrace End Register (3d4h index 11h
          bits 0-3). Only valid if bit 7 set.
       7  VRC4EN. If set the Vertical Retrace Register (3d4h index 11h bits
          0-3) is extended with bit 6 of this register.
Note: This register can only be written when 3d4h index 1Ah bit 4 is set

3d4h index 1Ah (R/W):  CRTC Extended Register 2
bit    0  6845 Emulation Mode. If set forces the CRTC to 6845 mode.
       1  EGA Emulation Mode. If set emulates the IBM EGA CRTC. Causes display
          to wrap at 512K ?
       2  (2228) Enable hardware cursor if set
       4  Protect Hardware Configuration. If clear disables writes to 3d4h
          index 19h, 1Dh and 3CEh index 0Bh and 0Fh. If set enables access to
          all extended registers
       5  If set causes color shifts ?
     6-7  (R) Version Number. 1: ALG2201, 3: ALG2101, 2: ALG2228/ALG2301

3d4h index 1Bh (R):  Configuration Register 1
bits 0-7  Reserved.
       2  Set for the ALG2228, clear for the ALG2201 & ALG2301 (this could
          also be a bus ID (set for VESA, clear for PCI) or similar ??)

3d4h index 1Ch (R/W):  Configuration Register 2
bit    0  DRAM Configuration. 0: 4 256Kx4 (512K), 1: 8/16 256Kx4
       1  Data Buffer Configuration. If clear the data bus is buffered with a
          74LS245 (or similar), if set it is unbuffered.
       2  3C3h/46E8h Select. If set the VGA Enable Port is at 3C3h, if clear
          at 46E8h.
       3  BIOS ROM Access Enabled if set
       4  Reserved (0=MCA bus, 1=ISA bus)?
       5  ROM Type. 0: 27128 (16K) ROM, 1: 27256 (32K) ROM.
       7  -MCS16 Decoding Control. If set -MCS16 is decoded from LA17-23, if
          clear from SA16-19
Note: The contents of this register are latched from M02D0-7 on the falling
      edge of the RESET signal.

3d4h index 1Dh (R/W):  Configuration Register 3
       0  Address Latch Enable. If set the address lines are latched
          internally on the falling edge of ALE, if clear the internal latch
          is transparent.
       1  Write-per-bit. If set forces the Sequencer to support DRAM write-
          per-bit operaton ?
       3  Clock Select Pin Putput Enable. If set VCLK1, VCLK2 and VCLK3 are
          output pins, if clear input pins.
       4  Output Enable. If set enables all output pins, if clear all output
          pins except -DATAENL, DIR, -DATAENH, RAS; CKS0, CKS1 and CKS2 are
          tristated.
       5  Slot Size Detection. Set if the slot is 16bit, clear if 8bit.
       6  External Video. If set enables the P0-7, BLANK, PCLK, HSYNC and
          VSYNC pins for video output, if clear tristates them.
Note: The contents of this register are latched from M1D0-7 on the falling
      edge of the RESET signal.
Note: This register can only be written when 3d4h index 1Ah bit 4 is set

3d4h index 1Eh (R/W):
bit  0-1  Video memory. 0=256k, 1=512k, 2=1M, 3=2Mbytes.
     6-7  Max Horizontal Frequency:  0=38kHz, 1=48kHz, 2=56kHz, 3=64kHz.

3d4h index 1Fh (R/W):
bit  0-1  Emulation. 0=VGA, 1=EGA, 2=CGA,3=MDA

3d4h index 20h (R/W):
bit  0-2  Display start address bit 16-18.
Note: if 3CEh index Ch bit 4 is set, the display start is in units of 8 bytes,
      rather than 4 as in std vga.

3d4h index 21h (R/W):  Cursor X position
bit  0-7  Bits 3-10 of the HW cursor X position. The lower bits are in index
          25h.

3d4h index 23h (R/W):  Cursor Y position
bit  0-7  Bits 1-8 of the HW cursor Y position. The upper bits are in index
          25h.
Note: in non-interlaced modes (3d4h index 19h bit 0 is 0) the Y co-ordinate
      should be multiplied by 2.

3d4h index 25h (R/W):  Cursor control
bit  0-1  Bit 9-10 of the HW cursor Y position. The lower bits are in index
          23h
     2-4  Bits 0-2 of the HW cursor X position. The upper bits are in index
          21h
       5  If set enables the HW cursor. To preserve the stability of the
          cursor, this bit should be set with each update of this register.
       6  Bit 0 of the HW cursor Y position. (see note on interlace).

3d4h index 27h W(R/W):  Cursor Map address
bit 0-10  The address in video memory where the HW cursor map starts.
          In planar modes this address is in units of 256 bytes,
          in packed modes in units of 1024 bytes.
          The HW cursor is a 64x64 bitmap imposed on the display.
          The cursor map is stored as a 64x64x2bit array, where each pixel is:
             0: Background color (3C0h index 16h)
             1: Foreground color (3C0h index 15h)
             2: The screen data (transparent cursor).
             3: Inverted screen data (XOR cursor)
Note: in interlaced modes the cursor is shown double height.

3d4h index 28h (R/W):  Vertical Extended reg
bit    7  CRTC Offset bit 8. Bits 0-7 are in 3d4h index 13h
Note: The extensions of the CRTC registers in this register are only
      active if 3d4h index 19h bit 7 is set.

3d4h index 2Ah (R/W):  Horizontal Extended reg                      (2201 +)
bit    0  Horizontal Total bit 8. Bits 0-7 are in 3d4h index 00h
       3  Horizontal Blanking ??.
       4  ??
       5  ??
Note: The extensions of the CRTC registers in this register are only active
      if 3d4h index 19h bit 7 is set.

3D6h (R/W):  Read Address Register
bit  0-4  64k Read bank number. If 3CEh index Fh bit 2 is set all reads use
          this bank number, if clear all accesses use 3D7h.

3D7h (R/W):  Read/Write Address Register
bit  0-4  64k Bank number. If 3CEh index Fh bit 2 is clear all accesses use
          this bank number, if set writes use this bank and reads use 3D6h.

8280h W(R/W): Source address low
bit 0-15  The lower 16 bits of the pixel address of the source area.

8282h (R/W): Source address high
bit  0-7  The upper 8 bits of the pixel address of the source area.
          Calculated as (line no.)*(pixels per line)+(pixel no. in line).

8284h W(R/W): Source area scanline width.
bit 0-15  The number of pixels in a scanline at the source.

8286h W(R/W): Destination address low.
bit 0-15  Lower 16 bits of the pixel address of the destination area.

8288h (R/W): Destination Address high.
bit  0-7  The upper 8 bits of the pixel address of the destination area.
          Calculated as (line no.)*(pixels per line)+(pixel no. in line).

828Ah W(R/W): Destination area scanline width
bit 0-15  Number of pixels in a scanline at the destination.

828Ch W(R/W): Width of op.
bit 0-15  Width of the blit area in pixels.

828Eh W(R/W): Height of op.
bit 0-15  Number of lines in the blit area.

8290h (R/W):
bit  0-5  7 If moving towards higher co-ordinates, 1 if moving towards lower.
          0 (or don't care) for line draws
       6  If set drawing only happens within the rectangle defined by
          8294h-9Ah.
          X co-ordinate must be >= 8294h and <=8296h.
          Y co-ordinate must be >= 8298h and <=829Ah.

8292h W(R/W):
bit  0-7  always 0Dh ???
       8  (Line Draw) If set the final position is to the left of the start
       9  (Line Draw) If set the final position is above the start
      10  (Line Draw) If set (Delta X) and (Delta Y) are swapped when
          calculating the Bresenham constants in 82A2h-A6h.
      11  ??
      12  Set if moving towards lower co-ordinates, clear if not.

8294h W(R/W):  Clipping left
bit 0-15  If 8290h bit 6 is set drawing only happens if the X-co-ordinate is
           >= this value

8296h W(R/W):  Clipping right
bit 0-15  If 8290h bit 6 is set drawing only happens if the X-co-ordinate is
           <= this value

8298h W(R/W):  Clipping top
bit 0-15  If 8290h bit 6 is set drawing only happens if the Y-co-ordinate is
           >= this value

829Ah W(R/W):  Clipping bottom
bit 0-15  If 8290h bit 6 is set drawing only happens if the Y-co-ordinate is
           <= this value

829Ch W(R/W): Start X co-ordinate
bit 0-15  Starting X co-ordinate of the destination area.

829Eh W(R/W): Start Y co-ordinate
bit 0-15  Starting Y co-ordinate of the destination area

82A0h W(R/W):
bit 0-15  Always set to 0 ??

82A2h W(R/W):  Bresenham Constant 1
bit 0-15  The Bresenham Constant 1 used for line drawing
          Calculated as  2*(Delta Y). If 8292h bit 10 is set 2*(Delta X) is
          used.

82A4h W(R/W):  Bresenham Constant 2
bit 0-15  The Bresenham Constant 2 used for line drawing
          Calculated as  2*((Delta Y) - (Delta X)). If 8292h bit 10 is set
          (Delta Y) and (Delta X) are swapped in the calculation.

82A6h W(R/W):  Bresenham Error Term
bit 0-15  The Bresenham Error Term used for line drawing.
          Calculated as  2*(Delta Y) + (Delta X). If 8292h bit 10 is set
          (Delta Y) and (Delta X) are swapped in the calculation.

82A8h W(R/W):
bit 0-15  (Line draw) Pattern mask. Only the set bits are drawn.

82AAh (R/W): COP status/instruction
bit  0-3  (R) When 0 the COP is free.
     0-7  (W) Graphics instruction:
               1: Fill rectangle
               2: Copy rectangle
               4: ?
               8: Line draw

82B0h

82BAh (R):  Status??
bit    7  Set if busy ?

82BCh

82C0h

82C8h W(R/W):
bit

82CAh W(R/W):
82CCh W(R/W):




ID Avance Logic chip:

  old:=rdinx($3d4,$1A);
  clrinx($3d4,$1A,$10);            {Disable extensions}
  if not testinx($3d4,$19) then
  begin
    setinx($3d4,$1A,$10);          {Enable extensions}
    if testinx($3d4,$19) and testinx2($3d4,$1A,$3F) then
       Avance Logic AL2101 !!
  end;
  wrinx($3d4,$1A,old);



  Video modes:

    20h  T   132   25  16
    21h  T   132   30  16
    22h  T   132   43  16
    23h  T   132   60  16
    24h  T    80   30  16
    25h  T    80   43  16
    26h  T    80   60  16
    27h  G   960  720  16  PL4
    28h  G   512  512 256  P8
    29h  G   640  400 256  P8
    2Ah  G   640  480 256  P8
    2Bh  G   800  600  16  PL4
    2Ch  G   800  600 256  P8
    2Dh  G   768 1024  16  Pl4
    2Eh  G   768 1024 256  P8
    2Fh  G  1024  768   4
    30h  G  1024  768  16  PL4
    31h  G  1024  768 256  P8
    33h  G  1024 1024 256  P8
    36h  G  1280 1024  16  PL4
    37h  G  1280 1024 256  P8
    40h  G   320  200 64k  P16
    41h  G   512  512 64k  P16
    42h  G   640  400 64k  P16
    43h  G   640  480 64k  P16
    44h  G   800  600 64k  P16
    45h  G  1024  768 64k  P16
    48h  G   640  480 16m  P24
    49h  G   800  600 16m  P24
