Compaq Super VGA chips. There are 3 "Families" of Compaq VGA chips: Integrated Video Graphics System (IVGS aka Starlight): Supports 640x480x16c. BitBLT functions Advanced VGA System (AVGA aka Stardust): Supports 800x600x16c and 640x480x256c. BitBLT functions. QVision: Supports 1024x768x256c. Newer versions support 1280x1024 and/or TrueColor. Hardware Cursor, BitBLT. QVision (128084) Max 1MB (Victory) QVision 1024 Max 2MB (V32 ?) QVision 1280 (139148) Max 2MB (V32) The QVision 2000 is actually a Matrox MGA-II (Ultima) clone. 3C2h (W): Miscellaneous bit 2-4 (QVision) Clock select. In AVGA mode the two lower bits selects one of 4 clocks, in QVision mode (3CEh index 0Fh <> A5h) these 3 bits selects 1 of 8 other clocks, thus there are 12 clocks available on the QVision. Note: This is a standard VGA register, all other bits follow VGA standard. This register can be read at 3CCh. 3CEh index 0Bh (R/W): bit 0 ?? 1 If set the ROM is 16bit wide, 8 if clear 2 If set video memory is 16bit wide, 8 if clear 3 Blanks screen if set ?? 4 ?? 3CEh index 0Ch (R): Controller Version bit 3-7 Version. 03h: IVGS 05h: AVGA 06h: Original QVision 0Eh: QVision 1024 or 1280 10h: Advanced VGA Port (What is this?) 3CEh index 0Dh (R/W): Extended Controller Version 3CEh index 0Eh (R/W): Extended Controller Capabilities 3CEh index 0Fh (R/W): Environment Register bit 0-3 writing 5 to this register unlocks the extended registers. 4-7 (QVision) 0Ah if in AVGA mode, 0 if in QVision mode Note: The QVision has a specific mode for AVGA support (Mode 29h and 2Eh), where the AVGA accelerator function and registers are used. 3CEh index 10h (R/W): BLTConf bit 0-1 ?? 2 (QVision) If set the 2xxxh-3xxxh register block is mapped at 4xxxh -5xxxh 3-4 (chip ?) Video interrupt. 0= Active Low, 1,3=Active High, 2=Disabled. 3 (QVision) If set enables access to some of the extended registers ? 5 Tri-state if set 6 ?? 7 (AVGA) If set the screen goes all white or black ? 3CEh index 11h (R/W): bit 0 ?? 3CEh index 40h (R/W): Control Register 0 bit 0 If set accesses to the upper bank (0A8000h-0AFFFFh) are calculated from 0A8000h (I.e.. to create a 64K unified window index 46h should be programmed with a value 8 larger than index 45h). If clear accesses are relative to 0A0000h (I.e.. use same value in index 45h and 46h). 1 If set the memory layout is different ? 2-7 ?? 3CEh index 41h (R/W): bit 0-2 ?? 3CEh index 42h (R/W): CRTC Overflow bit 0-1 Bit 8-9 of the Display Offset. Bits 0-7 are in 3d4h index 13h. 2-4 Display start Address bits 16-18. Bits 0-15 are in 3d4h index 0Ch,0Dh 5 ?? 6 If set moves the display ~50 lines ?? 7 ?? 3CEh index 43h (R/W): bit 0-7 ?? 3CEh index 44h (R/W): bit 0-7 ?? 3CEh index 45h (R/W): Page Register 0 bit 0-7 Bank number in 4KB blocks for accesses to A000h-A7FFh. (AVGA) In 16c planar modes the bank is in units of 1Kb (QVision 1280) If 23C7h bit 4 is set the bank is in units of 16Kb 3CEh index 46h (R/W): Page Register 1 bit 0-7 Bank number in 4KB units for accesses to A800h-AFFFh If index 40h bit 0 is set this value must be 8 larger than the value in index 45h (8*4k = 32k) to provide a 64k unified window. If index 40h bit 0 is clear this value should be the same as in index 45h. 3CEh index 48h (R/W): bit 0-3 High Area Memory (0=disabled, 1-0Eh = the 1MB boundary the HMA starts at). The HMA is a 1MB continuos mapping of the video buffer. 0-7 (QVision) Lower 8 bits of the HMA start address 3CEh index 49h (R/W): bit 0-7 (QVision) Upper 8 bits of the HMA start address 3CEh index 50h (R/W): (QVision) bit 0-2 ?? 3-6 Monitor (0,2,6??) 00h Compaq Internal Monitor 02h Compaq 16" Advanced Graphics Color Monitor 03h Compaq 1024 Color Monitor 04h QVision 200 (20") Color Monitor 05h Compaq SVGA Color Monitor 06h QVision 150 (15") Color Monitor or Compaq 151 FS Color Monitor 0Eh Compaq 14" VGA Monitor (31.5 kHz) 7 ?? 3CEh index 51h (R/W): (QVision) bit 0 Divides clock by ~3.5 if set ??? 1-2 ?? 3 If clear blanks the left half of the display ?? 4 Clock ?? 5 Horizontal Retrace End bit 5. Bits 0-4 are in 3d4h index 5 bits 0-4. 6 Vertical Total bit 10. Bits 0-7 are in 3d4h index 6, bits 8&9 are in 3d4h index 7. 7 Vertical Retrace Start bit 10. Bits 0-7 are in 3d4h index 10h. 3CEh index 52h (R/W): bit 0 3CEh index 54h (R/W): Available Memory (QVision) bit 0-7 Video Memory. 2: 512k, 4: 1024k, 8: 2048k Note: For the QVision 1024, 0 apparently means 1024KB. 3CEh index 55h (R/W): PLL Clock bit 0-7 ?? 3CEh index 56h (R/W): Controller Capabilities (QVision) bit 0-1 ?? 2 Set for QVision 1280, clear for QVision 1024 3-7 ?? 3CEh index 57h (R/W): Controller Capabilities II (QVision) bit 0-7 ?? 3CEh index 5Ah (R/W): (QVision) bit 0-5 1 for copy, 2 for fill 6-7 Set to 3 or 0 ?? 3CEh index 80h (R/W): (?) bit 2-3 2=Plasma system. 4-6 Palette option: 1=Standard palette, 2=Option B, 5=option A, 6=option C. 3CEh index 81h (R/W): (?) bit 2 Set for Palette option A-C and Standard palette, clear for option D. 13C6h - 13C9h are implemented as DAC regs REG0A,REG0B,REG08 and REG09 for the QVision (DAC has RS2 = 0 and RS3 = 1). 23C0h W(R/W): Source Address (IVGS, AVGA only) bit 0-15 Address of source in DWORDs (256colors) or bytes (16colors). (AVGA) Bit 16-17 are in 23C4h. The exact address and size of the BitBLT can be adjusted by 33C0h,33C1h,33C8h and 33C9h 23C2h (R/W): Width of area (IVGS, AVGA only) bit 0-7 Width in DWORDs of the Blit area. 23C2h W(R/W): Width of BitBLT operation (QVision only) bit 0-9 Width of the BitBLT area in pixels 23C4h W(R/W): Height of the BitBLT area bit 0-9 Number of lines in Blit area. 10-11 (AVGA) Bit 8-9 of the Scanline Width. Bit 0-15 are in 12-13 (AVGA) Bit 16-17 of the distance. Bit 0-15 are in 23CCh. 14-15 (AVGA) Bit 16-17 of Source address. Bit 0-15 are in 23C0h. 23C6h (R/W): 23C7h (R/W): bit 2 Set to enable Linear Frame Buffer. 4 Set to use 16K banks, clear to use original 4K banks 23CAh W(R/W): Scanline width. (IVGS, AVGA only) bit 0-15 Width of destination in DWORDs (256color) or bytes (16color). Negative if moving backwards. 23CCh W(R/W): Destination Address (IVGS, AVGA only) bit 0-15 Distance between the Destination and the Source Address in DWORDs (256colors) or bytes (16colors). (AVGA) Bit 16-17 are in 23C4h bit 12-13. 23CCh W(R/W): Scanline Width (QVision) bit 0- Bytes per scanline in the destination in units of 4 (DWORDs). 23CEh W(R/W): Scanline width. (IVGS, AVGA only) bit 0-15 Width of destination in DWORDs. Negative if moving backwards. Note: one must be source and the other destination width 33C0h (R/W): (IVGS, AVGA only) bit 0-7 Start pixel of BitBLT source 33C1h (R/W): (IVGS, AVGA only) bit 0-7 Ending pixel of BitBLT destination 33C7h (R/W): (IVGS, AVGA only) 33C8h (R/W): (IVGS, AVGA only) bit 0-1 Note: this is the same register as 3CEh index 3 ?? 33C9h (R/W): (IVGS, AVGA only) 33CAh W(R/W): Fore/Back ground color ? 33CCh W(R/W): Fore/Background color Note: Apparently the Fore/Background color registers must be written twice to work properly. 33CEh (R/W): COP Status/Command bit 0 (R) If set the CoProcessor is busy. 0-5 (W) 11h = Copy. 9 = Fill. 6 (W) Copy/Fill backwards if set 33CFh (R/W): 63C0h W(R/W): Source Bitmap X-address (QVision only) bit 0-9 The X co-ordinate of the start of the Source Data. 63C2h W(R/W): Source Bitmap Y-address (QVision only) bit 0-9 The Y co-ordinate of the start of the Source Data. 63C4h (R/W): 63C5h (R/W): 63CAh (R/W): bit 0-2 1=4bit packed, 3=8bit packed, 5= 15bit, 7=24 bit (packed as RGBa) 6 After loading the BitMap Address and Size registers, wait for this bit to be 0 before setting final registers and starting the command. 7 Wait for this bit to be 0, before loading the Source/Destination address and BitMap size registers. 63CBh (R/W): bit 0 Set for 2Mb? 2-3 Scanline Width. 0: 512 pixels/line, 1: 1024 pixels/line, 2: 2048 pixels/line 4-6 Set to 7 ? 63CCh W(R/W): Destination Bitmap X-address (QVision only) bit 0-9 The X co-ordinate of the start of the Destination Data 63CEh W(R/W): Destination Bitmap Y-address (QVision only) bit 0-9 The Y co-ordinate of the start of the Destination Data 83C4h (): Virtual Controller Select (QVision only) 83C6h-83C9h Extra DAC registers (RS2 = 1) on the AVGA and QVision boards 93C6h-93C9h Extra DAC registers (RS2 = 1, RS3 = 1) on QVision boards 93C6h W(R/W): Hardware Cursor Y-position bit 0-9 The X-position of the right pixel of the hardware cursor. 93C8h W(R/W): Hardware Cursor X-position bit 0-9 The Y-position of the lower scanline of the hardware cursor. Note: Registers 3C6h-3C9h, 13C6h-13C9h, 83C6h-83C9h and 93C6h-93C9h are physically in the Brooktree DAC. The AVGA connects A15 to RS2 on the DAC so 4 extra DAC registers are accessible at 83C6h-83C9h (if supported by the DAC), and the QVision connects A15 to RS2 and A12 to RS3 so 12 extra DAC registers are available at 83C6h-83C9h, 13C6h-13C9h and 93C6h-93C9h (if supported by the DAC). ID Compaq super VGA: old:=rdinx($3CE,$F); wrinx($3CE,$F,0); if not testinx($3CE,$45) then begin wrinx($3CE,$F,5); if testinx($3CE,$45) then begin SubVers:=rdinx($3CE,$C) shr 3; case SubVers of 3:name:='Compaq IVGS'; 5:name:='Compaq AVGA'; 6:name:='Compaq QVision 1024'; $E:if (rdinx(GRC,$56) and 4)>0 then name:='Compaq QVision 1280' else name:='Compaq QVision 1024'; $10:name:='Compaq AVPort'; else UNK(Compaq) end; end; end; wrinx($3CE,$F,old); Video Modes: 18h T 132 43 (AVGA) Mono 19h T 132 25 (AVGA) Mono 1Ah T 132 28 (AVGA) Mono 1Bh T 132 50 (AVGA) Mono 1Ch T 132 60 (AVGA) Mono 22h T 132 43 23h T 132 25 24h T 132 28 27h T 132 50 28h T 132 60 29h G 800 600 16c PL4 2Eh G 640 480 256c P8. Each scan line is 1024 bytes wide. Remaining modes only supported by QVision boards: 32h G 640 480 256c P8 Each scan line is 1024 bytes wide 33h G 640 400 256c P8 Each scan line is 1024 bytes wide 34h G 800 600 256c P8 Each scan line is 1024 bytes wide 37h G 1024 768 16c PK4 38h G 1024 768 256c P8 39h G 1280 1024 16c PK4 3Ah G 1280 1024 256c P8 Each scan line is 2048 bytes wide 3Eh G 640 480 32k P15 40h G 640 400 2 Compaq Portable only 4Dh G 512 480 16m P32 Four bytes per pixel 4Eh G 640 400 16m P32 Four bytes per pixel BitBLTs: There appear to be two different systems: mode 2Eh uses a system based on the memory address of the bitmaps involved, and with some fields packed. Is this to keep compatibility with something ?? Mode 32h, 37h and 38h use a system based on the pixel addresses of the bitmaps Also some of the registers appear to be mapped to more than one address ?? I.e.. drivers some times adds a value to the register address. Compaq BIOS extensions: ----------10BF00----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR AX = BF00h Note: all registers preserved and the internal monitor is blanked the external monitor becomes the active monitor ----------10BF01----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR AX = BF01h Note: all registers preserved and the external monitor is blanked the internal monitor becomes the active monitor ----------10BF02----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR AX = BF02h BH = master mode 04h CGA 05h EGA 07h MDA ----------10BF03BX0000----------------------- INT 10 - VIDEO - Compaq Extensions - Get Environment AX = BF03h BX = 0000h Return: BH = active monitor 00h = external 01h = internal 03h = both 04h = neither BL = master mode 00h = switchable VDU not present 04h = CGA 05h = EGA 07h = MDA 08h = switchable LCD controller present 09h = plasma VGA 0Ah = TFT (active matrix) VGA CH = 00h (reserved) (QVision) Bits 3-7: Chip ID (from 3CEh index 0Ch): 06h QVision 1024 0Eh QVision 1024 or 1280 CL = switchable VDU mode supported bit 0 = CGA supported bits 1,2 = reserved (1) bit 3 = MDA supported bits 4-7 = reserved (1) (QVision) Bit 0 Set if extended modes are enabled 4 BitBLT engine available if set 5 132-coloumn support available if set 6 640x480x256 mode available if set 7 8-bit DAC mode (256c of 16m) available if set DH = internal monitor type (see below) DL = external monitor type 00h = none 01h = dual-mode monitor 02h = 5153 RGB monitor (RGBI 16-color) 03h = Compaq Color monitor 04h = 640x400 flat panel (Plasma CGA) 05h = VGC monochrome 06h = VGC color 07h = 8-level mono LCD VGA (internal) 1024x768 mono VGA (external) 08h = 16-level mono plasma VGA (internal) 1024x768 color VGA (external) 09h = 4-level mono LCD CGA 0Ah = 16-level mono LCD VGA 0Bh = active-matrix color VGA 0Ch = active-matrix mono VGA 0Dh = STN color VGA ----------10BF04----------------------------- INT 10 - VIDEO - Compaq Portable Extensions - Set Mode Switch Delay AX = BF04h BH = new state of delay 00h enabled 01h disabled ----------10BF05----------------------------- INT 10 - VIDEO - Compaq Systempro Extensions - Enable/Disable Display AX = BF05h BH = new state of video 00h off 01h on ----------10BF06----------------------------- INT 10 - VIDEO - Compaq SLT/286 - Read Gray Scale Table AX = BF06h CL = address to be read from grey scale table Return: AL = bit 3-0 - Value read from grey scale table CL = address to be read from grey scale table ----------10BF07----------------------------- INT 10 - VIDEO - Compaq SLT/286 - Write Gray Scale Table AX = BF07h CH = value to write to grey scale table CL = address to be written to grey scale table ----------10BF08----------------------------- INT 10 - VIDEO - Compaq SLT/286 - Write Color Mix Registers AX = BF08h CH = bits 7-4 - Green weight bits 3-0 - Blue weight CL = bits 7-4 - unused bits 3-0 - Red weight ----------10BF09----------------------------- INT 10 - VIDEO - Compaq Extensions - Turn On Reverse Video AX = BF09h Return: CF clear Note: sets bit 6 of port 03CEh index 81h; in some cases also sets index 84h to 6Fh and index 83h to 04h Note: supported by at least the QVision board and the LTE Lite ROM BIOS ----------10BF0A----------------------------- INT 10 - VIDEO - Compaq Extensions - Turn Off Reverse Video AX = BF0Ah Return: CF clear Note: clears bit 6 of port 03CEh index 81h; in some cases also sets index 84h to 80h and index 83h to FBh Note: supported by at least the QVision board and the LTE Lite ROM BIOS --------b-10BF0B----------------------------- INT 10 - VIDEO - Compaq Extensions - Check Whether Video Reversed AX = BF0Bh Return: CF clear AX = state (0000h normal video, 0001h reversed video) Note: supported by at least the QVision board and the LTE Lite ROM BIOS ----------10BF0C------------------------------------ INT 10 - VIDEO - Compaq Extensions - Set 6bit DAC Mode AX = BF0Ch Return: CF clear Desc: specify that video DAC registers use only six bits of color info Note: supported by AVGA, QVision boards and the SystemPro XL ROM BIOS ----------10BF0D------------------------------------ INT 10 - VIDEO - Compaq Extensions - Set 8bit DAC Mode AX = BF0Dh Return: CF clear Desc: specify that video DAC registers use all eight bits of color info Note: supported by AVGA, QVision boards and the SystemPro XL ROM BIOS ----------10BF0E------------------------------------ INT 10 - VIDEO - Compaq Extensions - Get DAC Resolution AX = BF0Eh Return: AL = 00h if DAC in 6bit mode 01h if DAC in 8bit mode CF clear Note: supported by AVGA, QVision boards and the SystemPro XL ROM BIOS ----------10BF0F------------------------------------ INT 10 - VIDEO - Compaq Extensions - Set Linear Video Buffer Address AX = BF0Fh BX = Linear Video Buffer Address in megabytes, or 0FFFFh to let ROM configure Linear Video Buffer Address Return: AX = previous Linear Video Buffer Address CF clear Note: supported by AVGA, QVisions board and the SystemPro XL & LTE Lite ROM BIOSes ----------10BF10------------------------------------ INT 10 - VIDEO - Compaq QVision - Get Linear Video Buffer Address AX = BF10h Return: AX = Linear Video Buffer Address in megabytes CF clear Note: supported by AVGA, QVision boards and the SystemPro XL & LTE Lite ROM BIOSes ----------10BF11------------------------------------ INT 10 - VIDEO - Compaq Extensions - Get Extended Environment AX = BF11h Return: AL = BFh CF clear ES:SI -> Advanced Functionality Table (4 bytes): Bit 1 132-column modes supported if set 2 Set for QVision 1280's 4 Standard VGA modes supported if set 5 Accelerated VGA modes supported if set 6 Advanced VGA modes supported if set 7 QVision modes supported if set 8 Set for QVision 1280 and 1024's, clear for original QVision 12-15 Video memory in 256K units, 0=256K, 1=512K... Typical values are: 000030F2h Original QVision w/1MB?? 000010F2h Original QVision w/512K?? 000031F2h QVision 1024 w/1MB 000031F6h QVision 1280 w/1MB 000071F2h QVision 1024 w/2MB 000071F6h QVision 1280 w/2MB ES:DI -> COMPAQ text and date Note: supported by at least the QVision board and the LTE Lite and ProSignia ROM BIOSes Note: Some sources have the table at ES:DI and the text&date at ES:BX ----------10BF12------------------------------------ INT 10 - VIDEO - Compaq Extensions - New Active Monitor AX = BF12h BH reserved BL = function mask bit 0 External monitor 1 Internal monitor 7 If set bits 0 and 1 activate the monitor when set, if clear they toggle the state when set Return: CF clear Note: this function is a NOP if the VGA subsystem is inactive or the current Display Combination Code is 10h or higher Supported by at least the QVision board and the LTE Lite and ProSignia ROM BIOSes ----------10BF13------------------------------------ INT 10 - VIDEO - Compaq QVision - Gamma Correction AX = BF13h BH = 00h BL = 00h Loads Gamma Correction table for true color mode DS = BIOS data segment 01h Select Palette RAM bypass (direct DAC Mode) Note: Only effective for Hi/TrueColor modes. Must be called after the mode has been set and only have effect until the next mode switch ----------10BFE0------------------------------------ INT 10 - VIDEO - Compaq QVision (later models ??) AX = BFE0h