Weitek W5086 W5186 1MB, BitBlt, Line draw W5286 As W5186 + Color expansion and fills Power9000 Max 2MB. Not VGA compatible, but VGA chip can be added. Accelerates 8bit operations. Power9001 PCI version of the Power9000 Power9100 New version with a W5286 like VGA part built in. can handle 8MB and accelerates 8/16/32bit operations Power9130 Video accelerator W5x86 series: 3C0h index 15h (R/W): Overscan Color High 3C4h (R/W): Sequencer Index Register bit 0-2 Sequencer index bits 0-2 3 (W5086,W5186) Enable additional registers. If set enables registers at 300h, 301h, 30Ah, 320h and 32Ah 4 Sequencer index high bit 3C4h index 5 (W): Control Register 0 bit 2 SRS17. CRTC Display Start Address bit 16. Bits 0-15 are in 3d4h index 0Ch,0Dh 6 BO. Bit Order. If clear bit 0 is displayed first (VGA) 7 DVSAE. Dual Video Start Address/Offset Enable 3C4h index 6 (W): Control Register 1 bit 3 BSE. Special Text Attributes. If set the text attributres are defined as follows: bit 0 Color 0 (Half bright in monochrome) 1 Underline 2 Reverse Video 3 Blinking 4 Bold 5 Struck Through 6 Color 1 7 Color 2 6 GHAE. Graphics Accelerator Enable. 0: Halt, 1: Enable 3C4h index 07h (R): Revision Register Bit 0-2 Revision Level. 5-7 Chip ID. 1: W5186, 2: W5286 or P9100 (0: W5086 ???) 3C4h index 10h (R): User Bits bit 0-3 Manufacturer information. Read from straps at power-up. 4-7 Always returns 9 for the W5186, 5 for the W5286 & P9100. 3C4h index 10h (W): I/O Base bit 0-7 Defines the upper 8 bits of the I/O base address. Default is 3 to map the registers at 3xxh 3C4h index 11h (R/W): Miscellaneous bit 5 Clear to enable extensions 6 Clear to enable bank addressing Note: to update this register, first it must be read and the value rewritten twice, then the changed value can be written 3C4h index 12h (R/W): Output Control bit 5-6 3 for 640x480, 1 for 800x600, 0 else 6-7 (W5286) Memory. 0: 256K, 1: 512K, 2: 1MB 7 3C4h index 13h (R/W): Memory Base bit 0-3 Base Memory address. Defines the location of the 1MB Linear Aperture in units of 1MB. 3CDh (R/W): Bank Register bit 0-3 Write Bank 4-7 Read bank 3CEh (R/W): Graphics Controller Index Register bit 0-3 Index 7 (R) Graphics Engine Busy if set 3CEh index 09h (R/W): GHA Queue Base Address bit 0-7 Base address of the Instruction Queue in units of 1KB (?). The Graphics engine uses a 4KByte Instruction Queue of 256 16byte instructions. Each instruction has this format: Byte Bit Description 00h 0-3 Plane Mask. Each bit set enables writing in the corresponding plane 4 Sync. If set the instruction is delayed until Vertical Retrace occurs 5-7 Opcode. 0: Short BitBLT, 1: Long BitBLT, 2: Short Screen Move, 3: Long Screen Move, 4: Steep Line Draw, Flat Line Draw, 6: Block Move, 7: NOP 01h 0-7 Start Mask. Each bit set enables writing to the corresponding bits in the first byte of each scanline 02h 0-15 (BitBLT) Horizontal Total. The width of the blit area in bytes (-1) 02h 0-15 (Linedraw) Line Decrement. The amount to subtract from the error term when moving parallel to the minor axis 04h 0-3 Source Inversion Mask. Each bit if set causes source data from the corresponding plane to be inverted before applying the operation in Byte 05h (Color Plane Logical Operation). 4-7 Destination Inversion Mask. Each bit if set causes destination data from the corresponding plane to be inverted before applying the operation in Byte 05h (Color Plane Logical Operation). 05h 0-3 Color Plane Logical Operation 0 (LOP0) 4-7 Color Plane Logical Operation 1 (LOP1) The logical operation for each plane is controlled by one bit from LOP0 and one from LOP1 LOP1 LOP0 Operation 0 0 Store (NOP) 0 1 AND 1 0 OR 1 1 XOR 06h 0-7 End Mask. Each bit set enables writing to the corresponding bits in the last byte of each scanline 07h 0-7 Vertical Total. Height of the blit area in scanlines. Bits 8-9 are in Byte 0Dh bits 6-7. 08h 0-15 Destination Address. The offset from start of display memory in bytes. Bits 16-17 are in Byte 0Dh bits 1-2 0Ah 0-15 (BitBLT) Source Address. The offset from start of display memory in bytes. Bits 16-17 are in Byte 0Fh bits 1-2. 0Ah 0-15 (Linedraw) Line Initial Error. The Initial Error Term 0Ch 0-7 Destination Pitch. The number of bytes in each scanline at the destination. This is a 9bit two's complement value (Bit 8 is in Byte 0Dh bit 0). Use a negative value if DIR (Byte 0Fh bit 7) is set 0Dh 0 Destination Pitch bit 8. Bits 0-7 are in Byte 0Ch 1-2 Destination Address bits 16-17. Bits 0-15 are in Bytes 08h,09h 3-5 Rotate Count. Number of bits to right-shift 6-7 Vertical Total bits 8-9. Bits 0-7 are in Byte 07h 0Eh 0-7 (BitBLT) Source Pitch. The number of bytes in each scanline at the source. This is a 9bit two's complement value (Bit 8 is in Byte 0Fh bit 0). Use a negative value if DIR (Byte 0Fh bit 7) is set 0Eh 0-7 (Linedraw) Line Increment. The amount to add to the error term when moving parallel to the major axis 0Fh 0-5 (Linedraw) Line Increment bits 8-13. Bits 0-7 are in Byte 0Eh 0 (BitBLT) Source Pitch bit 8. Bits 0-7 are in Byte 0Eh 1-2 (BitBLT) Source Address bit 16-17. Bits 0-15 are in Byte 0Ah, 0Bh 3-4 (BitBLT) Expansion Source. Selects the plane that holds the source for the expansion. 5 (BitBLT) Expansion enable. If set color expansion is enabled 6 Interrupt Disable. If clear an interrupt is generated when the current instruction completes 7 Direction. If set the destination and source are processed right-to-left and bottom-to-top 3CEh index 0Ah (R/W): GHA Queue Tail Pointer bit 0-7 Points to the entry in the Instruction Queue where we put the next instruction. First write the instruction to this position, then increment this register 3CEh index 0Bh (R/W): GHA Queue Execution Pointer bit 0-7 Points to the currently (or most recently) executing instruction in the Instruction Queue. 3CEh index 0Ch (W): Extended Graphics bit 2 Set in extended 256 color modes 3CEh index 0Dh (R/W): GHA Bit Mask (5286) bit 0-7 Each bit enables updating the corresponding bit in each byte 3CEh index 0Eh W(R/W): BCOLOR (5286) bit 0-15 Background color for color expansion. 3d4h index 19h (R/W): Interlace 3d4h index 1Ah (R/W): Serial Start Address High bit 0-7 Bits 8-15 of the Start Address of the second frame buffer 3d4h index 1Bh (R/W): Serial Start Address Low bit 0-7 Bits 0-7 of the Start Address of the second frame buffer 3d4h index 1Ch (R/W): Serial Offset bit 0-7 CRTC Offset for the second frame buffer 3d4h index 1Dh (R/W): Total Characters Per Line bit 0-7 Number of character clocks displayed per line for the second frame buffer ID Weitek VGA: old:=rdinx(SEQ,$11); outp(SEQ+1,old); outp(SEQ+1,old); outp(SEQ+1,inp(SEQ+1) or $20); if not testinx(SEQ,$12) then begin x:=rdinx(SEQ,$11); outp(SEQ+1,old); outp(SEQ+1,old); outp(SEQ+1,inp(SEQ+1) and $DF); if testinx(SEQ,$12) and tstrg($3CD,$FF) then begin _Weitek chip_ end; end; wrinx(SEQ,$11,old); Video Modes: 0054h T 132 43 0055h T 132 25 0056h T 132 43 4color 0057h T 132 25 4color 0058h G 800 600 16c PL4 0059h G 800 600 16c PL4 005Ah G 1280 1024 16c PL4 005Ch G 800 600 256c P8 005Dh G 1024 768 16c PL4 005Eh G 1024 768 256c P8 005Fh G 640 480 256c P8 0064h T 132 60 0065h T 132 50 0066h T 132 60 4c 0067h T 132 50 4c 0068h T 80 60 0069h G 640 480 16m P24 006Ah G 800 600 16c PL4 006Ch G 640 480 32Kc P15 006Dh G 800 600 32Kc P15 006Eh G 640 480 64Kc P16 006Fh G 800 600 64Kc P16 Power 9000/9100: The Power 9000 and 9100 have different memory and register layouts. Also the different brands of Power9000/9100 boards all have different Linear Aperture addresses, DAC access and special registers The registers and video memory of the Power 9000 are mapped in a 4MB linear memory block staring at M (typically 20000000h, 80000000h or A0000000h): M+000000h - M+0FFFFFh (1MB) Non-Power 9000 use M+100000h - M+1FFFFFh (1MB) Registers. The registers are 32bit and internally stored in Big Endian format. Bits 16-18 of the address are used to access the register with different combinations of bit, byte and halfword (16bit) swaps: +00000h +10000h Swap bits +20000h Swap bytes +30000h Swap bytes and bits +40000h Swap Halfwords +50000h Swap Halfwords and bits +60000h Swap Halfwords and bytes +70000h Swap Halfwords, bytes and bits Bits 13-15 of the address appears to be ignored. M+200000h - M+3FFFFFh (2MB) Video memory The Power9100 has a more compact register layout where the registers are in one 32Kbyte block, accessible either at A000h or in the Linear Aperture. Swapping of bits/bytes/halfword are controlled from a register. The registers below are shown as M+xxxh, where M+xxxh is the Power9100 address (even if the register does not exist for the Power9100). The corresponding Power9000 address can be found as: Power9100 Power9000 0000h - 1FFFh 100000h - 101FFFh 2000h - 3FFFh 180000h - 181FFFh 4000h - 7FFFh No match The swap flags are added to the Power9000 address in bits 16-18 (see above). 3C4h index 12h (R/W): bit 0-1 Base Address. 0: None, 1: A0000000h, 2: 20000000h, 3: 80000000h 2 Should be 0 3 Should be 1 4 P9000 Enabled if set, disable if clear 5 HSync polarity. Positive if clear, negative if set 6 VSync polarity. Positive if clear, negative if set 7 W5186 (or other VGA) Enabled if set, disabled if clear 3CDh (R/W): Bank Register: (Viper) bit 0-5 Bank number. Maps a 64K block of the 4MB linear block at A000h, thus: 00h - 0Fh Maps 64K of the non-Power 9000 block 10h - 1Fh Maps a 64K Register block 20h - 3Fh Maps 64K of the Video memory Note: This register only exists in the Viper (non-PCI versions) and is implemented by external logic. XXXXh (R/W): PCI Bank Register (Viper PCI) bit 1-6 Bank number. Maps a 64K block of the 4MB linear block at A000h, thus: 00h - 0Fh Maps 64K of the non-Power 9000 block 10h - 1Fh Maps a 64K Register block 20h - 3Fh Maps 64K of the Video memory Note: This register only exists in the Viper PCI systems and is (probably?) implemented by external logic. The Base address for this register is found from Offset 14h in the PCI configuration space. 9100h (R/W): "PCI index register" (9100) bit 0-7 Selects the offset into the 256byte PCI configuration space accessed at 9104h. This allows access to the PCI configuration space even in non-PCI systems. 9104h (R/W): "PCI data register" (9100) bit 0-7 Each access to this register reads or writes the byte from the PCI configuration space selected by 9100h. This allows access to the PCI configuration space even in non-PCI systems. M+0004h D(R/W): System Configuration Register bit 0-2 Power 9000 version number. Always 0 on the 9100 9 Pixel writes go to buffer 1 if set, buffer 0 if clear 10 Pixel reads go to buffer 1 if set, buffer 0 if clear 11 If set swaps bits within each 32 bit DWORD when accessing display memory (similar to the bit swap for register accesses) 12 If set swaps bytes within each 32 bit DWORD when accessing display memory (similar to the byte swap for register accesses) 13 If set swaps halfwords within each 32 bit DWORD when accessing display memory (similar to the halfword swap for register accesses) 14-22 The width of a scanline in pixels is determined by adding the result of the three 3bit fields (Bits 14-16, 17-19 and 20-22). Each field selects: 0: 0, 1: 32, 2: 64, 3: 128, 4: 256, 5: 512, 6: 1024, 7: 2048. Thus a width of 1280 is achieved by having one field with 0, one with 4 and one with 6 (0+256+1024 = 1280). 23 Must be 0 24 If set the Frame Buffer Controller has double load, normal if clear 25 Must be 0 26-28 (9100) Pixel Size. 0: 8bpp, 1: 16bpp, 2: 24bpp 29-20 (9100) Shift3. Fourth subfield for the scanline width in bits 14-22 M+0008h D(R/W): Interrupt Register bit 0 The drawing engine is idle if set, busy if clear 1 Must be set on writes for bit 0 to be updated. Reads as 1 2 If set a pick is done 3 Must be set on writes for bit 2 to be updated. Reads as 1 4 If set a vertical blanking has occured 5 Must be set on writes for bit 4 to be updated. Reads as 1 Note: The interrupt status bits (Bits 0,2,4) are sticky, once the condition has occured they remain set until cleared by a write. If an interrupt status bit (Bits 0,2,4) is set an interrupt will be generated if allowed by the Interrupt Enable register (M+0000Ch). M+000Ch D(R/W): Interrupt Enable bit 0 If set allows interrupt when the drawing engine goes idle 1 Must be set on writes for bit 0 to be updated. Reads as 1 2 If set allows interrupt when a pick occurs 3 Must be set on writes for bit 2 to be updated. Reads as 1 4 If set allows interrupt when vertical blanking occurs 5 Must be set on writes for bit 4 to be updated. Reads as 1 6 If set allows interrupts as specified by bits 0,2 and 4, if clear all interrupts are disabled 7 Must be set on writes for bit 6 to be updated. Reads as 1 M+0010h D(R/W): Alternate Read Bank (9100) bit 16-22 Read bank. Selects the 64K block accessed by reading at Axxxxh M+0014h D(R/W): Alternate Write Bank (9100) bit 16-22 Write bank. Selects the 64K block accessed by writing to Axxxxh M+0104h D(R): Horizontal Counter (hrzc) bit 0-11 The currently displayed pixel in DDOTCLK clocks from the start of Horizontal Retrace (Falling edge of HSYNC-). M+0108h D(R/W): Horizontal Length (hrzt) bit 0-11 The total number of DDOTCLK clocks in a scanline including blanking . and retrace M+010Ch D(R/W): Horizontal Sync Rising Edge (hrzsr) bit 0-11 The HSYNC- pulse width in number of DDOTCLK clocks. M+0110h D(R/W): Horizontal Blank Rising Edge (hrzbr) bit 0-11 The number of DDOTCLK clocks from the start of horizontal retrace (Falling edge of HSYNC-) to the end of blanking (Rising edge of HBLNK-) M+0114h D(R/W): Horizontal Blank Falling Edge (hrzbf) bit 0-11 The number of DDOTCLK clocks from the start of the horizontal retrace (Falling edge of HSYNC-) to the start of blanking (Falling edge of HBLNK-) M+0118h D(R/W): Horizontal Counter Preload Value (prehrzc) bit 0-11 The value to load into the Horizontal Counter (M+100104h) when an internal or external HSYNC- is received to allow synchronisation with an external source. Should be set to 0 if external sync is not used. M+011Ch D(R): Vertical Counter (vrtc) bit 0-11 The currently displayed line number M+0120h D(R/W): Vertical Length (vrtt) bit 0-11 The total number of lines in a frame including blanking and retrace M+0124h D(R/W): Vertical Sync Rising Edge (vrtsr) bit 0-11 The width of the Vertical Sync (VSYMC-) pulse in scanlines M+0128h D(R/W): Vertical Blank Rising Edge (vrtbr) bit 0-11 The number of scanlines from the start of Vertical Retrace (Falling edge of VSYNC-) to the end of Vertical Blanking (Rising edge of VBLNK-) M+012Ch D(R/W): Vertical Blank Falling Edge (vrtbf) bit 0-11 The number of scanlines from the start of Vertical Retrace (Falling edge of VSYNC-) to the start of Vertical Blanking (Falling edge of VBLNK-) M+0130h D(R/W): Vertical Counter Preload Value (prevrtc) bit 0-11 The value to load into the Vertical Counter (M+18011Ch) when an internal or external VSYNC- is received to allow synchronization with external video sources. Should be set to 0 if external sync is not used. M+0134h D(R): Screen Repaint Address (sraddr) bit 0-11 The next VRAM row address to load into the VRAM. This is bits 10-21 of the linear memory address. When Vertical Blanking starts this register is set to 0 (or the start address of the second buffer). M+0138h D(R/W): Screen Repaint Timing Control (srtctl) bit 0-2 QSF counter position. Selects which bit in the QSF counter register (M+013Ch) causes the next row address transfer. Typical values: Memory 1 DDOTCLK 1 DDOTCLK Config: = 4 dots = 8 dots 1 4 3 2 4 3 3 5 4 4 5 4 5 6 5 3 Set to select buffer 1 for display, clear to select buffer 0 4 Set to select Restricted (HBLNK- reload) mode, clear to select normal (split shift) mode. 5 Set for normal operation, clear for Blanks asserted 6 Set to select Composite synchronization, clear to select separate synchronization 7 Set to select internal HSYNC-, clear to select external HSYNC- 8 Set to select internal VSYNC-, clear to select external VSYNC- M+013Ch D(R): QSF Counter (qsfcounter or sraddr_inc?) bit 0-11 Counts DDOTCLK pulses within the current VRAM page, Ie. which bits are shifted out of the VRAMs Note: The sraddr_inc and qsfcounter register appears to be the same, but the documentation leaves some doubt M+0184h D(R/W): Memory Configuration (mem_config) bit 0-2 Frame buffer VRAM configuration: 0: Memory Config 1. 8 256Kx4 VRAMs in 1 bank and 1 1Mpixel buffer 1: Memory Config 2. 8 128Kx8 VRAMs in 2 interleaved banks and 1 1Mpixel buffer 2: Memory Config 3. 16 256Kx4 VRAMs in 2 interleaved banks and 1 2Mpixel buffer 3: Memory Config 4. 16 256Kx4 VRAMs in 2 interleaved banks and 2 1Mpixel buffers 4: Memory Config 5. 32 256Kx4 VRAMs in 4 interleaved banks and 2 2Mpixel buffers M+0188h D(R/W): Refresh Period (rfperiod) bit 0-9 The max time between memory refreshes in SYSCLK periods M+018Ch D(R): Refresh Counter (rfcount) bit 0-9 This register is decremented on each SYSCLK until it reaches 0, when a refresh request is made and the register is reloaded from the Refresh Period Register (M+0188h). M+0190h D(R/W): RAS Low Maximum (rlmax) bit 0-9 The maximum time the RAS- signal can be asserted in SYSCLK periods M+0194h D(R): RAS low count (rlcur) bit 0-9 When RAS- is asserted this register is loaded with the value in the RAS Low Maximum register (M+0190h) and then decremented on each SYSCLK until either RAS- is deasserted, or it reaches 0 in which case a refresh sequence is started. M+198h W(?): (9100) bit 12-15 Number of FIFo slots free ?? Note: Apparently the IBM RGB525 DAC requires a read or write of this register for the last write to a DAC register at 200h-23Ch takes effect ? M+200h - M+23Ch D(R/W): DAC regs 0-15 (9100) bit 0-7 Each access to one of these registers causes a read or write of the corresponding DAC register (200h is REG00, 210h is REG04...) The IBM RGB525 DAC apparently requires a read or write of M+198h after a write to a DAC register ? Usually the same value is repeated in all four bytes (bits 0-7, 8-15, 16-23 and 24-31) ? M+2000h D(R): Status Register bit 0 If set the source coordinates for a quad draw straddle the clipping window 1 If set the source coordinates for a quad draw are entirely inside the clipping window 2 If set the source coordinates for a quad draw are entirely outside the clipping window 3 If set the requested quad is concave 4 If set an exception was encountered for a quad command, the operation cannot be performed and must be done in software 5 If set an exception was encountered for a blit command, the operation cannot be performed and must be done in software 6 If set an exception was encountered for a pixel command, the operation cannot be performed and must be done in software 7 If set a pick was detected. (This is a copy of the pick bit in the interrupt register (M+0008h bit 2)). 30 If set the drawing engine is busy 31 If set a Quad or Blit operation can not be started M+2004h D(R): Blit command Note: Reading this register issues a Blit command using X[0]/Y[0] as the upper left corner of the source, X[1]/Y[1] as the lower right corner of the source, X[2]/Y[2] as the upper left corner of the destination and X[3]/Y[3] as the lower right corner of the destination. The source and destination areas must be the same size. If the destination is out of range bit 5 of the Status Register (M+2000h) is set and the operation must be done in software. Bit 31 of the Status Register (M+2000h) should be tested before a Quad operation is issued. M+2008h D(R): Quad command Note: Reading this register issues a Quad command using X[0-3],Y[0-3] as coordinates. If the Quad defined by the coordinates id concave or one (or more) of the coordinates is out of range bit 4 of the Status Register (M+2000h) is set and the operation must be done in software. Bit 31 of the Status Register (M+2000h) should be tested before a Quad operation is issued. M+200Ch D(W): Pixel8 command M+2014h D(W): Next_pixels command M+2080h - M+20FCh D(W): Pixel1 Note: Writing to this register starts a Pixel1 command of (n+1) pixels, where n is bits 2-6 of the address written to. M+2184h D(R): Out of range (OOR) Register bit 0 Set if y[0] is out of range 1 Set if y[1] is out of range 2 Set if y[2] is out of range 3 Set if y[3] is out of range 4 Set if x[0] is out of range 5 Set if x[1] is out of range 6 Set if x[2] is out of range 7 Set if x[3] is out of range M+218Ch D(R/W): Cindex bit 0-1 Selects one of the 4 X/Y coordinate register sets. M+2190h D(R/W): Window Offset Register bit 0-15 Y-offset of current window 16-31 X-offset of current window M+2194h D(R): Parameter Engine Window Minimum Register bit 0-12 Minimum Y value (top line). Pixels above this line are not drawn 16-28 Minimum X value (left edge). Pixels left of this are not drawn Note: This register can be read and written at M+2220h M+2198h D(R): Parameter Engine Window Maximum Register bit 0-12 Minimum Y value (bottom line). Pixels below this line are not drawn 16-28 Minimum X value (right edge). Pixels right of this are not drawn Note: This register can be read and written at M+2224h M+21A0h D(R): Yclip bit 0 Set if Y[0] > the window maximum (M+2224h) 1 Set if Y[1] > the window maximum (M+2224h) 2 Set if Y[2] > the window maximum (M+2224h) 3 Set if Y[3] > the window maximum (M+2224h) 4 Set if Y[0] < the window minimum (M+2220h) 5 Set if Y[1] < the window minimum (M+2220h) 6 Set if Y[2] < the window minimum (M+2220h) 7 Set if Y[3] < the window minimum (M+2220h) M+21A4h D(R): Xclip bit 0 Set if X[0] > the window maximum (M+2224h) 1 Set if X[1] > the window maximum (M+2224h) 2 Set if X[2] > the window maximum (M+2224h) 3 Set if X[3] > the window maximum (M+2224h) 4 Set if X[0] < the window minimum (M+2220h) 5 Set if X[1] < the window minimum (M+2220h) 6 Set if X[2] < the window minimum (M+2220h) 7 Set if X[3] < the window minimum (M+2220h) M+21A8h D(R): Xedge_lt bit 0 Set if X[0] > X[2] 1 Set if X[1] > X[3] 2 Set if X[3] > X[0] 3 Set if X[2] > X[3] 4 Set if X[1] > X[2] 5 Set if X[0] > X[1] M+21ACh D(R): Xedge_gt bit 0 Set if X[0] < X[2] 1 Set if X[1] < X[3] 2 Set if X[3] < X[0] 3 Set if X[2] < X[3] 4 Set if X[1] < X[2] 5 Set if X[0] < X[1] M+21B0h D(R): Yedge_lt bit 0 Set if Y[0] > Y[2] 1 Set if Y[1] > Y[3] 2 Set if Y[3] > Y[0] 3 Set if Y[2] > Y[3] 4 Set if Y[1] > Y[2] 5 Set if Y[0] > Y[1] M+21B4h D(R): Yedge_gt bit 0 Set if Y[0] < Y[2] 1 Set if Y[1] < Y[3] 2 Set if Y[3] < Y[0] 3 Set if Y[2] < Y[3] 4 Set if Y[1] < Y[2] 5 Set if Y[0] < Y[1] M+2200h D(R/W): Foreground Color (fground) (9000) bit 0-7 The foreground color used in drawing M+2200h D(R/W): Color 0 (9100) bit 0-31 Color0. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and 24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31. M+2204h D(R/W): Background Color (bground) bit 0-7 The background color used in drawing M+2204 D(R/W): Color 1 (9100) bit 0-31 Color1. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and 24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31. M+2208h D(R/W): Plane Mask (pmask) bit 0-7 Each bit enables the corresponding plane in the frame buffer if set M+220Ch D(R/W): Draw mode (draw_mode) bit 0 If set selects buffer 1 for all drawing operations, if clear selects buffer 0 1 Must be set on writes for bit 0 to be updated. Reads as 1 2 If set suppresses all writes and sets the picked bit in the Interrupt Register (M+0008h bit 2) 3 Must be set on writes for bit 2 to be updated. Reads as 1 M+2210h D(R/W): Pattern Origin X (Pat_originx) bit 0-3 X origin of the pattern M+2214h D(R/W): Pattern Origin Y (Pat_originy) bit 0-3 Y origin of the pattern M+2218h D(R/W): Raster Register (raster) bit 0-7 (9100) The minterm to use for raster operations. 0-15 (9000) The minterm to use for raster operations. 13 (9100) Solid Color Disable. If set Solid Color is disabled and Patterns enabled, if clear Solid Color is disabled and Patterns are disabled. 14 (9100) Pattern Depth. 0: 2color, 1: 4color 15 (9100) Pixel1 Transparent. Enable Pixel1 transparent mode if set 16 If set Quad draw mode is Oversize mode, if clear X11 mode 17 If set enables the pattern (M+2280h - M+229Ch) for Quad draw operations, if clear disables the pattern by forcing it to all 1's M+221Ch D(R/W): Pixel8 Register (pixel8_reg) bit 0-7? Excess data from the last pixel8 operation. M+2220h D(R/W): Window Minimum Register (w_min) bit 0-12 Minimum Y value (top line). Pixels above this line are not drawn 16-28 Minimum X value (left edge). Pixels left of this are not drawn M+2224h D(R/W): Window Maximum Register (w_max) bit 0-12 Minimum Y value (bottom line). Pixels below this line are not drawn 16-28 Minimum X value (right edge). Pixels right of this are not drawn M+2238h D(R/W): Color2 (9100) bit 0-31 Color2. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and 24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31. M+223Ch D(R/W): Color 3 (9100) bit 0-31 Color3. For 8bpp modes repeat bits 0-7 in bits 8-15, 16-23 and 24-31, for 15/16bpp modes repeat bits 0-15 in bits 16-31. M+2280h D(R/W): Pattern 0/1 Register (9000) M+2280h D(R/W): Pattern 0 (9100) M+2284h D(R/W): Pattern 2/3 Register (9000) M+2284h D(R/W): Pattern 1 (9100) M+2288h D(R/W): Pattern 4/5 Register (9000) M+2288h D(R/W): Pattern 2 (9100) M+228Ch D(R/W): Pattern 6/7 Register (9000) M+228Ch D(R/W): Pattern 3 (9100) M+2290h D(R/W): Pattern 8/9 Register (9000) M+2290h D(R/W): Software 0 (9100) M+2294h D(R/W): Pattern 10/11 Register (9000) M+2294h D(R/W): Software 1 (9100) M+2298h D(R/W): Pattern 12/13 Register (9000) M+2298h D(R/W): Software 2 (9100) M+229Ch D(R/W): Pattern 14/15 Register (9000) M+229Ch D(R/W): Software 3 (9100) M+22A0h D(R/W): Byte Window Min (9100) M+22A4h D(R/W): Byte Window Max (9100) M+3000h - M+31FFh D(R/W): Device Coordinate Registers bit 0-31 (Adr bit 3-4 = 1) 32bit X coordinate 0-31 (Adr bit 3-4 = 2) 32bit Y coordinate 0-15 (Adr bit 3-4 = 3) 16bit Y coordinate 16-31 (Adr bit 3-4 = 3) 16bit X coordinate Note: When these registers are accessed the lower bits of address selects the X/Y register and the form used as follows: Address bits: 0-2 Should be 0 3-4 Selects the data: 1: 32bit X value, 2: 32bit Y value, 3: Y in lower 16 bits and X in upper 16 bits 5 If set the data (X/Y) is window relative (only valid for writes), if clear the data is absolute 6-7 Selects the X/Y coordinate register: 0: X[0]/Y[0], 1: X[1]/Y[1], 2: X[2]/Y[2], 3: X[3]/Y[3] Note: On the Power9000 these registers can probably also be accessed at address: M+3400h - M+35FFh (M+181400h - M+1815FFh in Power9000 terms) as bit 10 of the address is not decoded M+3200h - M+33FFh D(W): Meta-Coordinate Pseudo regs bit 0-31 (Adr bit 3-4 = 1) 32bit X coordinate 0-31 (Adr bit 3-4 = 2) 32bit Y coordinate 0-15 (Adr bit 3-4 = 3) 16bit Y coordinate 16-31 (Adr bit 3-4 = 3) 16bit X coordinate Note: For these registers the data written is the coordinate(s) and the lower bits of the address specify the drawing operation: Address bits: 0-2 Should be 0 3-4 Selects the interpretation of the data written to the register. 1: 32bit X value, 2: 32bit Y value, 3: Y in lower 16 bits and X in upper 16 bits 5 If set the coordinate is relative to the previous one, if clear it is relative to the window offset 6-8 Type of operation. 0: Point, 1: Line, 2: Triangle, 3: Quadrilateral, 4: rectangle Note: On the Power9000 these registers can probably also be accessed at address: M+3600h - M+37FFh (M+181600h - M+1817FFh in Power9000 terms) as bit 10 of the address is not decoded 4386-9h DAC 8386-9h DAC C386-9h DAC PCI Configuration space: Byte 41h Bit 2 Set to access the DAC registers at A000h Bit 3 Set to access the graphics engine registers at A000h Memory Locations: 0:0487h (9100) Bit 4. Set for IBM RGB525 DAC, clear for Bt485 DAC 0:0489h (9100) Bit 5. Set for 4MB video memory, clear for 2MB ----------1DAA------------------------------- INT 10 - VIDEO - Diamond Get System Info (Viper Pro) AX = 1DAAh BX = FDECh Return: BX = CEDFh if Viper Pro (Weitek P9100) AL = Memory Type: 01h: 1MB 8 128Kx8 02h: 2MB 8 256Kx8 or 16 256Kx4 04h: 4MB 10h: 1MB 8 256Kx4 AH = Bits 0-3 = DAC type: 0: Normal 8bit DAC 1: Sierra 15/16bit DAC 2: MUSIC MU9c1880/Diamond SS24 3: Brooktree Bt485 7: IBM RGB525 4 = VGA chip. 0: Weitek 5x86, 1: Oak OTI-087 5 = Bus type: 0: VLB bus, 1: PCI bus. SI:DI -> Viper BIOS string