Paradise/Western Digital Super VGA Chips. Max mem Max 16col 256 col PVGA1A 512k/1M 800x600 640x480 WD90C00 512k/1M 1024x768 800x600 also known as PVGA1B WD90C10 256k 640x480 320x200 WD90C11 512k 1024x768 800x600 WD90C20 800x600 640x480? LCD/plasma controller derived from WD90C00. 32 grey scales WD90C22 As C20, but 64 grey scales WD90c24 LCD with BitBLT, line draw and VESA local bus interface. WD90c26A LCD controller. Can drive LCD and CRT simultaneously. 3.3V WD90C30 1M 1024x768 1024x768 (D-step) WD90C31 1M 1280x1024 1024x768 (1DW - accelerator) Hardware Cursor, BitBLT. WD90C33 2M 1280x1024 Accelerator. as WD90c31, but with 8-level instruction FIFO. VESA local bus interface. WD90C35 Next version Support chips: WD90c55 Color LCD interface for WD90c2x WD90c56 Local Bus Interface for WD90c31 94h (W): Setup Register (Micro Channel) 102h (R/W): VGA Sleep Register (setup mode only) bit 0 VGA enabled if set. 1-7 Reserved. Note: this register can only be accessed in setup mode. 3C3h (W): Global Enable Register bit 0 VGA Motherboard Enable if set 3C4h index 3 (R/W): Reconfigured Character Map Select bit 0-2 Offset of character map in plane 2/3 in 8k blocks 3-4 Character map select from plane: 0: plane 2 1: plane 2 if attr. bit 3 set, plane 3 else 2: plane 3 if attr. bit 3 set, plane 2 else 3: plane 3 3C4h index 6 (R/W): Note: in the WD90c1x chips this register must be programmed with 48h. 3C4h index 7 (R/W): Display Configuration Status (WD90C1x Only) bit 0 (R) Monitor type 1 (R) EGA emulation if set 2 (R) 6845 compatibility if set 3 (R) Color mode if set 4-7 Scratch Pad 3C4h index 10h (R/W): Memory Interface (WD90C11 Only) bit 2 3C4h index 11h (R/W): System Control Interface (WD90C1x Only) bit 0 (WD90C1x Only) 16 bit access to CRTC, Graphics Controller and Sequencer Registers if set 1 (WD90c1x Only) 16 bit access to Attribute Registers if set. If so 3C0h is index and 3C1h is data port. 2 Enable Write buffer if set 3-4 Enhanced speed depending of host bus speed: 0 for 12MHz, 1 for 10 MHz, 2,3 for 8 MHz 5 Enhanced text mode operations if set 6 Enhanced operation on blank lines if set 7 (WD90C1x,3x Only) If set Bank reg PR0A is used for read cycles and PR0B for write cycles, else PR0B is used for A000h-A7FFh and PR0A for A800h-AFFFh. 3C4h index 12h (R/W): Miscellaneous Control #4 (WD90C1x Only) bit 6 Enable Cursor Blinking if set 7 Enable External Sync 3C4h index 14h (R/W): (WD90C3x only) bit 0-3 6 (WD90c33) Bit 8 of PR0A. Bits 0-7 are in 3CEh index 9. 3C4h index 15h (R/W) 3CEh index 9 (R/W): PR0A Address Offset A bit 0-6 (top, right->left, if clear top->bottom, left->right. 11 Activation/status bit. Set this bit to start blit operation 23C2h index 1/1 W(W): BITBLT Control Part 2 (c31+ only) bit 0 Destination transparency if set 2 If set matching pixels are opaque, transparent if clear. 3 Monochrome transparency if set 4 If set source is an 8x8 pattern 6 Update destination on completion of blit 7 Quick start when destination register is written 10 Interrupt enable when blit completes 23C2h index 1/2 W(W): BITBLT Source Low bit 0-11 Lower 12 bits of the pixel source address 23C2h index 1/3 W(W): BITBLT Source High bit 0-11 Upper 12 bits of the pixel source address 23C2h index 1/4 W(W): BITBLT Destination Low bit 0-11 Lower 12 bits of the pixel destination address 23C2h index 1/5 W(W): BITBLT Destination High bit 0-11 Upper 12 bits of the pixel destination address 23C2h index 1/6 W(W): BITBLT Dim X bit 0-11 Width of blit area 23C2h index 1/7 W(W): BITBLT Dim Y bit 0-11 Height of blit area 23C2h index 1/8 W(W): BITBLT Row Pitch bit 0-11 Scanline width at the destination 23C2h index 1/9 W(W): BITBLT Raster Op bit 8-11 Raster operation 0 ROP_Zero 1 ROP_And 2 ROP_SAnd 3 ROP_Src 4 ROP_NSad 5 ROP_Dst 6 ROP_Xor 7 ROP_Or 8 ROP_Nor 9 ROP_XNor 10 ROP_NDest 11 ROP_Sond 12 ROP_NSrc 13 ROP_NSod 14 ROP_NAnd 15 ROP_One 23C2h index 1/Ah W(W): BLT Foreground Color 23C2h index 1/Bh W(W): BLT Background Color 23C2h index 1/Ch W(W): BLT Transparency Color 23C2h index 1/Dh W(W): BLT Transparency Mask 23C2h index 1/Eh W(W): BLT Mask 23C2h index 2/0 W(W): bit 4 (WD90c33) If set doubles the cursor horizontally 6 (WD90c33) If set cursor plane A selects between background and the screen data 8 Affects cursor appearance ?? 9 Set for 64x64 cursor, clear for 32x32 11 Set to enable hardware cursor 23C2h index 2/1 W(W): (WD90c31+ only) bit 0-11 Lower 12 bits of the address of the Cursor Bitmap. In 256 color modes this is in units of 4 bytes, in planar modes in bytes. The Upper bits are in index 2. Note: The cursor map data is a 32x32 or 64x64 bitmap with 2 bits per pixel. The data is stored as 8bits of "A" data followed by 8bits of "B" data. The effect on each pixel is: A: B: 0 0 Set to a fixed color (Which one ??) 0 1 Set to a fixed color (Which one ??) 1 0 Original screen data (transparent) 1 1 XOR cursor 23C2h index 2/2 W(W): (WD90c31+ only) bit 0-11 Upper 12 bits of the address of the Cursor Bitmap in the display memory in units of 4 bytes. The Lower bits are in index 1. 23C2h index 2/5 W(W): Cursor Hotspot (WD90c31 only) bit 0-5 The X hotspot position within the cursor from the left 6-11 The Y hotspot position within the cursor from the top 23C2h index 2/6 W(W): Cursor X position (WD90c31 only) bit 0-11 The X position of the cursor in pixels from the left. 23C2h index 2/7 W(W): Cursor Y position (WD90c31 only) bit 0-11 The Y position of the cursor in scanlines from the top. 23C2h index 2/Ch W(W): Cursor Hotspot (WD90c33 only) bit 0-5 The X hotspot position within the cursor from the left 6-11 The Y hotspot position within the cursor from the top 23C2h index 2/Dh W(W): Cursor X position (WD90c33 only) bit 0-11 The X position of the cursor in pixels from the left. 23C2h index 2/Eh W(W): Cursor Y position (WD90c33 only) bit 0-11 The Y position of the cursor in scanlines from the top. 46E8h (R/W): Global Enable Register (AT only) bit 0-2 BIOS ROM page select (8 pages of 4K each). 3 Adapter VGA enabled if set 4 If set the VGA is in Setup mode, where 102h and 46E8h are the only ports responding. Wake Up port at 102h responds only if this bit set. Note: This register is also addressed at 56E8h, 66E8h and 76E8h. Register only readable if 3d4h index 2Eh bit 7 set 3d4h index 31h-3fh used in WD90C1x. Bank Switching: Bank switching happens by adding the bank register to bit 12-19 of the address, resulting in the window starting on a 4k boundary. Two different bank registers can be used either as Read/Write banks (WD90C1x) or as two different windows each 32k/64k big. Memory: $C000:$09 string BIOS date $C000:$35 1 byte BIOS version $C000:$7D 4 bytes $3ED414756 ('VGA=') ID Paradise/WD Super VGA Chip set: old:=rdinx($3CE,$F); setinx($3CE,$F,$17); {Lock registers} if not testinx2($3CE,9,$7F) then begin modinx($3CE,$F,$17,5); {Unlock again} if testinx2($3CE,9,$7F) then begin old2:=rdinx(base,$29); modinx(base,$29,$8F,$85); {Unlock WD90Cxx registers} if not testinx(base,$2B) then 'Paradise PVGA1A' else begin wrinx($3C4,6,$48); if not testinx2($3C4,7,$F0) then 'Western Digital WD90C00' else if not testinx($3C4,$10) then begin if testinx2(base,$31,$68) then 'Western Digital WD90C22' else if testinx2(base,$31,$90) then 'Western Digital WD90C20A' else 'Western Digital WD90C20'; wrinx($3d4,$34,$A6); if (rdinx($3d4,$32) and $20)<>0 then wrinx($3d4,$34,0); end else if testinx2($3C4,$14,$F) then begin SubVers:=(rdinx(base,$36) shl 8)+rdinx(base,$37); case SubVers of $3234:'Western Digital WD90C24' $3236:'Western Digital WD90C26' $3330:'Western Digital WD90C30' $3331:'Western Digital WD90C31' $3333:'Western Digital WD90C33' else UNK(Paradise);' end else if not testinx2($3C4,$10,4) then 'Western Digital WD90C10' else 'Western Digital WD90C11'; end; wrinx($3d4,$29,old2); end; wrinx($3CE,$F,old); Video Modes: 14h T 132 25 16 WD90c33 21h T 132 44 16 WD90c33 41h T 80 34 16 47h T 132 28 16 54h T 132 43 16 (7/8x9) 55h T 132 25 16 (7/8x16) 56h T 132 43 4 (7/8x9) 57h T 132 25 4 (7/8x16) 58h G 800 600 16 PL4 59h G 800 600 2 odd/even **** See note Not on newer boards? 5Ah G 1024 768 2 odd/even **** See note Not on newer boards? 5Bh G 1024 768 4 packed **** See note Not on newer boards? 5Ch G 800 600 256 P8 WD90C11/3x Only 5Dh G 1024 768 16 PL4 5Eh G 640 400 256 P8 5Fh G 640 480 256 P8 60h G 1024 768 256 P8 WD90c3x only 61h G 640 400 32k P15 WD90c31+ only 62h G 640 480 32k P15 WD90c3x only 63h G 800 600 32k P15 WD90c3x only 64h G 1280 1024 16 PL4 WD90c31+ only 66h T 80 50 16 (8x8) 67h T 80 43 16 (8x8) 68h G 320 200 32k P15 WD90c31 only 69h T 132 50 16 (8x8) 6Ah G 800 600 16 PL4 6Ch G 1280 960 16 PL4 6Eh G 640 480 16m P24 WD90c33 71h G 640 400 64k P16 WD90c33 72h G 640 480 16m P24 WD90c31 only (2048 bytes per line) 72h G 640 480 64k P16 WD90c33 73h G 800 600 64k P16 WD90c33 Mode 5Bh 1024x768 4 color. 2 bit per pixel packed mode. Pixels start in bit 6-7. Mode 59h 800x600 2 color and Mode 5Ah 1024x768 2 color. One bit per pixel odd/even mode Pixels 0-7 are in plane 0, 8-15 in plane 1. Bios extensions: ----------10007E----------------------------- INT 10 - VIDEO - Paradise VGA, AT&T VDC800 - SET SPECIAL MODE AX = 007Eh BX = horizontal dimension of the desired mode CX = vertical dimension of the desired mode Both BX,CX in dots for graph modes, chars for alpha modes DX = Number of colors desired (0000h for monochrome) Return: BH = 7Eh if successful (Paradise VGA) AL = 7Eh if successful (AT&T VDC800) ----------10007F----------------------------- INT 10 - VIDEO - Paradise .... EXTENDED MODE SET AX = 007Fh BH = 00h set VGA operation BH = 01h set non-VGA operation color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation monochrome mode 7 will set non-VGA MDA/Hercules operation BH = 02h Query mode status Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode CH = total video RAM size in 64k byte units CL = video RAM used by the current mode BH = 03h Lock current mode. Allows current mode (VGA or non-VGA) to survive re-boot. BH = 04h Set non-VGA MDA/Hercules Mode BH = 05h Set non-VGA CGA Mode BH = 06h Set VGA Mono Mode BH = 07h Set VGA Color Mode BH = 09h..0Fh Write Paradise Register BL = New value of PR register BH = 19h..1Fh Read Paradise Register Return: BL = Value of register BH: (Read) BH: (Write) Register 19h 09h PR0A Port 3CEh index 09h 1Ah 0Ah PR0B Port 3CEh index 0Ah 1Bh 0Bh PR1 Port 3CEh index 0Bh 1Ch 0Ch PR2 Port 3CEh index 0Ch 1Dh 0Dh PR3 Port 3CEh index 0Dh 1Eh 0Eh PR4 Port 3CEh index 0Eh 1Fh --- PR5 Port 3CEh index 0Fh BH = 20h Emulate EGA with Analog Monitor (WD90Cxx Chips Only) BL=EGA Switches in Bit 0-3 BH = 29h..30h Read Paradise Register (WD90Cxx Chips Only) Return: BL = Value of register BH: Register: 29h PR10 Port 3CEh index 29h 2Ah PR11 Port 3CEh index 2Ah 2Bh PR12 Port 3CEh index 2Bh 2Ch PR13 Port 3CEh index 2Ch 2Dh PR14 Port 3CEh index 2Dh 2Eh PR15 Port 3CEh index 2Eh 2Fh PR16 Port 3CEh index 2Fh 30h PR17 Port 3CEh index 30h BH = 60h BH = 61h BH = A5h BH = A6h Note: The functions 60h, 61h, A5h and A6h are supported by the 5/14/93 ROM for the Dell 486D Return: AL = 7Fh If successful (AT&T VDC600) BH = 7Fh If valid call (Paradise/Western Digital) --------V-106E00----------------------------- INT 10 - Paradise VGA internal - GET ??? AX = 6E00h Return: BX = 5744h ('WD') if supported DH:AH:AL = last three ASCII digits of ROM serial number CL = ??? CH = ??? --------V-106E04----------------------------- INT 10 - Paradise VGA internal - GET SCREEN SIZE AND ??? AX = 6E04h Return: BX = screen width (columns) CX = screen height (lines) AH = ??? (05h or FFh) AL = ??? (04h or video mode) --------V-106E05----------------------------- INT 10 - Paradise VGA internal - SET MODE AX = 6E05h BL = mode Note: like AH=00h, AL=BL.