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