Matrox MGA series MGA-I "IS-ATLAS" Used for the Impression series. Upto 3Mb VRAM, 2Mb DRAM (Z-buffer) Impression Pro: Upto 4.5Mb VRAM, 4Mb DRAM (Z-buffer) BitBLT, 3D-acceleration MGA-II "IS-DUBIC","IS-TITAN" 2chips (160pin & 240pin). Used for the Ultima series. Upto 4MB VRAM. BitBLT. No 3D support ? "IS-HELENA" 240 pin chip. Used for the Impression Lite/Plus series 3D support ? "2064W". Millenium series. 32bit VGA core. Upto 8Mb The Impression (original/Pro/Lite/Plus) boards have 3D functions (Gouraud shading), the Ultima series does not. The Compaq QVision 2000 card is based on the MGA-II VGA registers. The VGA engine can be disabled. 3d4h index E0h (R): Note: 3d4h index E1h (R/W): bit 0-7 ?? 3d4h index E2h (R/W): bit 0-7 ?? 3d4h index E3h (R/W): bit 0-7 ?? 3DEh index 00h (R/W): bit 0-7 ?? 2 If set blanks the first ~256 pixels 4 If set the display wraps at 128Kbytes 3DEh index 01h (R/W): bit 0 In 256color modes enables the bank system when set. 1-2 ?? 3 Set for Extended 256 color modes. 4-7 ?? 3DEh index 02h (R/W): bit 0-7 ?? 3DEh index 03h (R/W): bit 0-7 ?? 3DEh index 04h (R/W): bit 0-7 ?? 3DEh index 07h (R): 3DEh index 08h (R): 3DEh index 09h (R/W): bit 0-3 64K bank number. 3DEh index 0Ah (R/W): bit 0-1 Display Start Address bit 16-17. Bits 0-15 are in 3d4h index 0Ch-0Dh Note that for 256color modes bits 0-1 of 3d4h index 0Dh appears to be ignored. The data intended for these bits should be written to 3d4h index 8 bits 5-6 instead. 2-3 ?? 4 Appears to be set when the display start address is set ?? 6-7 ?? 3DEh index 0Ch (R/W): bit 0-4 ?? 7 ?? 3DEh index 0Dh (R/W): bit 0-7 ?? 0 If set 1-2 Swaps lines (0/1 -> 1/0 ???) 4 If set changes memory layout 6 Interlaced if set ? 7 Clock ?? 3DEh index 0Eh Matrox Native mode: In native mode the Matrox chips use a 16Kbyte memory mapped area. In the MGA-I (Impression) series this was apparently always at AC00h:0, in the MGA-II (Ultima) series it can be at AC00h:0, C800h:0, CC00h:0, D000h:0, D400h:0, D800h:0 or DC00h:0. M+0000h - M+1BFFh: Source/DMA Window M+1C00h - M+1CFFh: Drawing Registers M+1C00h D(W): Drawing Control Register (DWGCTL) bit 0-3 Opcode. 0: Open Line, 1: Auto/Open Autoline, 2: Closed Line, 3: Closed Autoline, 4: Trap, 8: BitBLT, 9: Iload, Ah: Idump 4-5 Auto line type. 0: RPL, 1: RSTR, 2: ANTI, 3: ZI 6 Blockmode ON if set 7 Linear BitBLT if set, XY BitBLT if clear 16-19 ROP. 0: Black/Blackness (0), 1: NotMergePen (Not (Dst OR Src)), 2: MaskNotPen (Dst AND Not Src), 3: NotCopyPen (Not Src), 4: MaskPennot ((Not Dst) AND Src), 5: NOT (Not Dst), 6: XORPEN (Dst XOR Src), 7: NOTMASKPEN (Not (Dst AND Src)), 8: MASKPEN (Dst AND Src), 9: NOTXORPEN (Not Dst XOR Src), Ah: NOP (Dst), Bh: MERGENOTPEN (Dst OR Not Src), Ch: COPYPEN/SRCCOPY (Src), Dh: MERGEPENNOT ((Not Dst) OR Src), Eh: MERGEPEN (Dst OR Src), Fh: WHITE/WHITENESS (1) 20-23 Trans 0-15 ?? 24 Alpha Dither. Set for RED, clear for foreground 25-26 (BitBLT) Blt Mode. 0: Mono, 1: Planar, 2: Foreground color, 3: UCOL? 25 (Z buffer?) ZDRWEN?. Set for Depth, clear for No Depth 26 (Z buffer?) ZLTE?. Set for Less_Than_or_Equal, clear for Less_Than 27 (Autoline?) Autoline foreground is Foreground Color if set, ALU data if clear (h?) Background Source is BGR/Windows if set, RGB/EC3 if clear ?? 28 (Auto line?) ABAC is Background color if set, old data if clear (?) HCPRS Source is 24bpp if set, 32bpp if clear 29 Pattern enabled if set, disabled if clear 30 Transc. Background is Transparent if set, Opaque if clear M+1C04h (W): Memory Access Register (MACCESS) bit 0-1 Pixel Width. 0: 8bpp, 1: 16bpp, 2: 32bpp 2-3 0: Source buffer, 2: Dest buffer A, 3: Dest buffer B M+1C08h (W): Memory Control Wait State Register (MCTLWTST) Note: Set to C4001000h for IDUMPs ?? M+1C10h (W): Destination In Register (DST0) M+1C14h (W): Destination In Register (DST1) M+1C18h (W): Z Mask Control Register (ZMSK) M+1C1Ch (W): Plane write Mask (PLNWT) bit 0-31 Each bit if set enables writing to the corresponding bit in video memory. FFFFFFFFh enables all of memory, FFh enables only the low byte of each DWORD (Blue), FF00h enables Green, FF0000h enables the Red byte and FF000000h enables the free byte. M+1C20h (W): Background Color (BCOL) M+1C24h (W): ForeGround Color (FCOL) M+1C2Ch (W): Source Register for Blit (SRCBLT) M+1C30h (W): Source Register 0 (SRC0) M+1C34h (W): Source Register 1 (SRC1) M+1C38h (W): Source Register 2 (SRC2) M+1C3Ch (W): Source Register 3 (SRC3) M+1C40h (W): X Y Start Address (XYSTRT) M+1C44h (W): X Y End Address (XYEND) M+1C50h (W): Funnel Shifter Control Register (SHIFT) bit 16-21 Rightwise Shift count (2's complement -32 to 31). M+1C58h (W): Sign Register (SGN) bit 0 (Blit) If set the X coordinate moves from right to left (decreasing X), if clear from left to right (increasing X). (Line) Set if DeltaX > DeltaY. 1 2 If set the Y coordinate moves from bottom to top (decreasing Y), if clear from top to bottom (increasing Y). 5 M+1C5Ch (W): Length Register (LEN) M+1C60h AR0 bit 0-16 ?? M+1C64h AR1 M+1C68h AR2 M+1C6Ch AR3 M+1C70h AR4 M+1C74h AR5 M+1C78h AR6 M+1C8Ch (W): Memory Pitch (PITCH) bit 5-12 Memory pitch in units of 32 (pixels or bytes?) 15 If set Y is not linear ?? M+1C90h (W): Y Address Register (YDST) M+1C94h (W): Memory Origin Register (YDSTORG) M+1C98h (W): Clipper Y Top Boundary (CYTOP) M+1C9Ch (W): Clipper Y Bottom Boundary (CYBOT) M+1CA0h (W): Clipper X Minimum Boundary (CXLEFT) M+1CA4h (W): Clipper X Maximum Boundary (CXRIGHT) M+1CA8h (W): X Address Register Left (FXLEFT) M+1CACh (W): X Address Register Right (FXRIGHT) M+1CB0h (W): X Destination Address Register (XDST) M+1CC0h - M+1CFFh DR0 - DR15 M+1D00h - M+1DFFh: Start Drawing Registers M+1E00h - M+1EFFh: Host Registers M+1E00h (R/W): Source Page Register (SRCPAGE) M+1E04h (R/W): Destination Page Register (DSTPAGE) M+1E08h (R/W): Byte Accumulator Data (BYTACCDATA) M+1E0Ch (R/W): Address Generator Register (ADRGEN) M+1E10h (R/W): Bus FIFO Status Register (FIFOSTATUS) bit 0-6 FIFO count 8 Full 9 Empty 16-22 Byte Accumulator Address 24-29 Address Generator State M+1E14h D(R/W): Status Register (STATUS) bit 0 Bus FIFO Error Interrupt Status 1 DMA Controller Interrupt Status 2 Pick Interrupt Status 3 Vsync Status 8-11 Byte flag 16 Drawing Engine Status. Set if the engine is busy. M+1E18h (W): Interrupt Clear Register (ICLEAR) bit 0 Write 1 to clear the Bus FIFO Interrupt 1 Write 1 to clear the DMA Controller Interrupt 2 Write 1 to clear the Pick Interrupt M+1E1Ch (R/W): interrupt Enable Register (IEN) bit 0 Bus FIFO Interrupt enabled if set 1 DMA Controller Interrupt enabled if set 2 Pick Interrupt enabled if set 3 Vsync Interrupt enabled if set Note: "DMA Controller" could be "DMA Terminal Count" ? M+1E40h (R/W): Reset Register (RST) bit 0 Write 1 to perform a soft reset M+1E44h (R/W): Test Register (TEST) bit 0 VGA test 8 Robitwren ? M+1E48h (R): Revision Register (REV) bit 0-31 A2681700h for the MGA-II (Ultima) A2681702h for the Impression LIte/Plus M+1E50h (R/W): Configuration Register (CONFIG_REG) M+1E54h (R/W): Operating Mode Register (OPMODE) bit 0 Pseudo DMA enabled if set 1 DMA Act? enabled if set 2-3 DMA mode. 1: Blit Write, 2: Vector Write, 3: Blit Read M+1E5Ch (R/W): CRTC Control (CRTC_CTRL) M+1E60h (R/W): VCOUNT Register (VCOUNT) M+1F00h - M+1FFFh: VGA registers Accesses to these addresses will access the VGA registers at 3xxh, I.e. M+1FC4h accesses 3C4h. M+2000h - M+3BFFh: Destination Window M+3C00h - M+3C7Fh: RamDAC Registers The RamDAC registers are mapped 4 addresses apart (I.e. REG00 at M+3C00h, REG01 at M+3C04h...). M+3C80h - M+3CFFh: Dubic Chip Registers M+3C80h (R/W): DUB_SEL M+3C84h (R/W): NDX_PTR The indexed DUBIC registers are accessed by writing the index to M+3C84h and reading or writing the data at M+3C88h. M+3C88h (R/W): DUB_DATA Data port for the indexed registers M+3C84h index 00h (R/W): DUB_CTL M+3C84h index 01h (R/W): KEY_COL M+3C84h index 02h (R/W): KEY_MSK M+3C84h index 03h W(R/W): DBX_MIN_MAX M+3C84h index 05h W(R/W): DBY_MIN_MAX M+3C84h index 07h (R/W): OVS_COL M+3C84h index 08h (R/W): CUR_X M+3C84h index 09h (R/W): CUR_Y M+3C84h index 0Ah (R/W): DUB_CTL2 M+3C84h index 0Ch (R/W): DUB_COL0 M+3C84h index 0Dh (R/W): DUB_COL1 M+3C84h index 0Eh (R/W): CRC_CTL M+3C84h index 0Fh (R/W): CRC_DAT M+3C83h (R/W): LASER M+3C84h (R/W): MOUSE0 M+3C85h (R/W): MOUSE1 M+3C86h (R/W): MOUSE2 M+3C87h (R/W): MOUSE3 M+3D00h - M+3D7Fh: Viwic Chip Registers M+3D80h - M+3DFFh: Clock Generator M+3E00h - M+3FFFh: Expansion Devices Identifying Matrox chips: Modes (VGA part): 27h G 800 600 PL4 2Ah G 1024 768 PL4 33h G 640 400 P8 34h G 640 480 P8 39h G 800 600 P8 3Bh G 1024 768 P8 41h T 90 25 43h T 120 25 44h T 132 25 ----------10BD----------------------------------- INT 10 - VIDEO - Matrox - Check for Matrox card AX = BDFFh Returns: AX = 00BDh if Matrox card installed DX = BIOS segment ----------10BD----------------------------------- INT 10 - VIDEO - Matrox AX = BDFEh AL = Emulation 43h CGA emulation 45h EGA emulation 4Dh Hercules emulation 56h VGA emulation ES:DI -> signature string "Calamity" Switches to the desired emulation MCA specifics: POS ID - 80ECh (Ultima) POS registers: 00h bit 0 Set if adapter enabled 01h bit 0-2 Memory Mapping. Controls location of the 16K aperture 0: AC00h, 2: C800h, 3: CC00h, 4: D000h, 5: D400h, 6: D800h, 7: DC00h