INT 10 - VIDEO - SET VIDEO MODE AH = 00h AL = mode (graphics mode if graphics resolution listed) text pixel graphic color disp scrn system resol box resoltn page addr 00h = 40x25 8x8 B&W 8 B800 CGA = 40x25 8x14 B&W 8 B800 ATI VIP 01h = 40x25 8x8 16 8 B800 CGA = 40x25 8x14 16 8 B800 ATI VIP 02h = 80x25 8x8 B&W 4 B800 CGA = 80x25 8x8 B&W 8 B800 EGA/MCGA/VGA = 80x25 8x14 B&W 8 B800 ATI VIP 03h = 80x25 8x8 16 4 B800 CGA = 80x25 8x8 16 8 B800 EGA/MCGA/VGA 04h = 40x25 8x8 320x200 4 1 B800 CGA 05h = 40x25 8x8 320x200 4 gray 1 B800 CGA 06h = 80x25 8x8 640x200 B&W 1 B800 CGA 07h = 80x25 9x14 mono 1 B000 MDA/Hercules = 80x25 8 EGA/VGA = 80x25 9x14 mono B000 ATI VIP 08h = 20x25 8x8 160x200 16 B800 PCjr/Tandy 1000 09h = 40x25 8x8 320x200 16 B800 PCjr/Tandy 1000 0Ah = 80x25 8x8 640x200 4 B800 PCjr/Tandy 1000 0Bh = reserved (used internally by EGA BIOS) 0Ch = reserved (used internally by EGA BIOS) 0Dh = 40x25 8x8 320x200 16 8 A000 EGA/VGA 0Eh = 80x25 8x8 640x200 16 4 A000 EGA/VGA 0Fh = 80x25 8x14 640x350 mono 2 A000 EGA/VGA 10h = 80x25 8x14 640x350 4or16 2 A000 EGA/VGA 11h = 80x30 8x16 640x480 mono A000 VGA/MCGA/ATI EGA/ATI VIP 12h = 80x30 8x16 640x480 16 A000 VGA/ATI VIP = 80x30 8x16 640x480 16/64 A000 ATI EGA Wonder 13h = 40x25 8x8 320x200 256 A000 VGA/MCGA/ATI VIP 14h = 80x25 8x8 640x200 Lava Chrome II EGA 15h = 80x25 8x14 640x350 Lava Chrome II EGA 16h = 80x25 8x14 640x350 Lava Chrome II EGA 17h = 80x34 8x14 640x480 Lava Chrome II EGA 18h = 132x44 8x8 mono Tseng Labs EVA = 80x34 8x14 640x480 Lava Chrome II EGA 19h = 132x25 8x14 mono Tseng Labs EVA 1Ah = 132x28 8x13 mono Tseng Labs EVA 22h = 132x44 8x8 Tseng, Ahead 23h = 132x25 6x14 Tseng Labs EVA = 132x25 8x14 Ahead Systems EGA2001 = 132x25 8x8 16 B800 ATI EGA Wonder/ATI VIP 24h = 132x28 6x13 Tseng Labs EVA 25h = 80x60 8x8 640x480 Tseng Labs EVA = 640x480 16 VEGA VGA 26h = 80x60 8x8 Tseng Labs EVA = 80x60 8x8 640x480 Ahead Systems EGA2001 27h = 720x512 16 VEGA VGA = 132x25 8x8 mono B000 ATI EGA Wonder/ATI VIP 28h = ???x??? VEGA VGA 29h = 800x600 16 VEGA VGA 2Dh = 640x350 256 VEGA VGA 2Eh = 640x480 256 VEGA VGA 2Fh = 720x512 256 VEGA VGA 30h = 800x600 256 VEGA VGA = ???x??? B800 AT&T 6300 33h = 132x44 8x8 16 B800 ATI EGA Wonder/ATI VIP 36h = 960x720 16 VEGA VGA 37h = 1024x768 16 VEGA VGA = 132x44 8x8 mono B000 ATI EGA Wonder/ATI VIP 40h = 80x25 8x16 640x400 2 1 B800 AT&T 6300, Compaq Portable = 80x43 VEGA VGA 41h = 640x200 16 1 AT&T 6300 = 132x25 VEGA VGA 42h = 80x25 8x16 640x400 16 AT&T 6300 = 132x43 VEGA VGA 43h = unsupported 640x200 of 640x400 viewport AT&T 6300 = 80x60 VEGA VGA 44h = disable VDC and DEB output AT&T 6300 = 100x60 VEGA VGA 48h = 80x50 8x8 640x400 2 B800 AT&T 6300 49h = 80x30 8x16 640x480 Lava Chrome II EGA 4Dh = 120x25 VEGA VGA 4Eh = 120x43 VEGA VGA 4Fh = 132x25 VEGA VGA 50h = 132x25 9x14 mono Ahead Systems EGA2001 = 80x30 8x16 640x480 16 Paradise EGA-480 = 80x43 mono VEGA VGA = 640x480 mono??? Taxan 565 EGA = 80x34 Lava Chrome II EGA 51h = 80x30 8x16 Paradise EGA-480 = 132x25 mono VEGA VGA = 80x34 8x14 640x480 16 ATI EGA Wonder = 80x30 Lava Chrome II EGA 52h = 132x44 9x8 mono Ahead Systems EGA2001 = 132x43 mono VEGA VGA = 94x29 8x14 752x410 16 ATI EGA Wonder = 80x60 Lava Chrome II EGA 53h = 100x40 8x14 800x560 16 ATI EGA Wonder/ATI VIP = 132x43 Lava Chrome II EGA 54h = 132x43 8x8 Paradise EGA-480 = 132x43 7x9 16/256k B800 Paradise VGA = 132x43 8x9 16/256k B800 Paradise VGA on multisync = 132x43 Taxan 565 EGA = 100x42 8x14 800x600 16 A000 ATI EGA Wonder = 132x25 Lava Chrome II EGA 55h = 132x25 8x14 Paradise EGA-480 = 132x25 7x16 16/256k B800 Paradise VGA = 132x25 8x16 16/256k B800 Paradise VGA on multisync = 132x25 Taxan 565 EGA = 80x66 8x8 16/256k A000 ATI VIP = 94x29 8x14 752x410 Lava Chrome II EGA 56h = 132x43 8x8 3??? 2 B000 NSI Smart EGA+ = 132x43 7x9 4 B000 Paradise VGA = 132x43 8x9 4 B000 Paradisk VGA on multisync = 132x43 mono Taxan 565 EGA 57h = 132x25 8x14 3??? 4 B000 NSI Smart EGA+ = 132x25 7x16 4 B000 Paradise VGA = 132x25 8x16 4 B000 Paradise VGA on multisync = 132x25 mono Taxan 565 EGA 58h = 100x75 8x8 800x600 16/256k A000 Paradise VGA = 80x33 8x14 16 B800 ATI EGA Wonder/ATI VIP 59h = 100x75 8x8 800x600 2 A000 Paradise VGA = 80x66 8x8 16/256k A000 ATI VIP 5Eh = 640x400 256 Paradise VGA,VEGA VGA 5Fh = 640x480 256 Paradise VGA 60h = 80x??? ???x400 Corona/Cordata BIOS v4.10+ = 752x410 VEGA VGA 61h = ???x400 Corona/Cordata BIOS v4.10+ = 720x540 VEGA VGA 62h = 800x600 VEGA VGA 70h = extended mode set (see below) Everex Micro Enhancer EGA 71h = 100x35 8x16 800x600 16of64 A000 NSI Smart EGA+ 74h = 640x400 2 B800 Toshiba 3100 AT&T mode 7Eh = special mode set (see below) Paradise VGA 7Fh = special function set (see below) Paradise VGA 82h = 80x25 B&W AT&T VDC overlay mode * 83h = 80x25 AT&T VDC overlay mode * 86h = 640x200 B&W AT&T VDC overlay mode * C0h = 640x400 2/prog pallet AT&T VDC overlay mode * C4h = disable output AT&T VDC overlay mode * D0h = 640x400 2 B800 DEC VAXmate AT&T mode ??? = 640x225 Z-100 ??? = 640x400 Z-100 * for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h, 40h, or 44h Note: IBM standard modes do not clear the screen if the high bit of AL is set -------------------------------------------------- INT 10 - VIDEO - Everex Micro Enhancer EGA - EXTENDED MODE SET AX = 0070h BL = mode (graphics mode if graphics resolution listed) text pixel graphic color disp scrn monitor resol box resoltn page addr 00h = 640x480 multisync'ing 01h = 752x410 multisync'ing 02h = reserved 03h = 80x34 multisync'ing 04h = 80x60 multisync'ing 05h = 94x29 multisync'ing 06h = 94x51 multisync'ing 07h = reserved 08h = reserved 09h = 80x44 EGA 0Ah = 132x25 EGA 0Bh = 132x44 EGA 0Ch = 132x25 CGA 0Dh = 80x44 mono 0Eh = 132x25 mono 0Fh = 132x44 mono -------------------------------------------------- INT 10 - VIDEO - Paradise VGA - SET SPECIAL MODE AX = 007Eh BX = The horizontal dimension of the mode desired CX = The vertical dimension of the mode desired (both BX/CX in pixels for graphics modes, rows for alpha modes) DX = The number of colors of the mode desired (use 0 for monochrome modes) Return: BH = 7Eh if successful. -------------------------------------------------- INT 10 - VIDEO - Paradise VGA - EXTENDED FUNCTIONS 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 = 0 if operating in VGA mode, 1 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 = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh WRITE PARADISE REGISTERS 0,1,2,3,4,5 (port 03CEh indices A,B,C,D,E,F) BL = Value to set in the paradise register. BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5 (port 03CEh indices A,B,C,D,E,F) Return: BL = Value of the paradise register. BH = 7Fh if successful. -------------------------------------------------- INT 10 - VIDEO - SET CURSOR CHARACTERISTICS AH = 01h CH bits 0-4 = start line for cursor in character cell bits 5-6 = blink attribute (00=normal, 01=invisible, 10=slow, 11=fast) CL bits 0-4 = end line for cursor in character cell Note: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but returns unmapped cursor shape -------------------------------------------------- INT 10 - VIDEO - SET CURSOR POSITION AH = 02h DH,DL = row, column (0,0 = upper left) BH = page number 0 in graphics modes 0-3 in modes 2&3 0-7 in modes 0&1 -------------------------------------------------- INT 10 - VIDEO - READ CURSOR POSITION AH = 03h BH = page number 0 in graphics modes 0-3 in modes 2&3 0-7 in modes 0&1 Return: DH,DL = row,column CH = cursor start line CL = cursor end line -------------------------------------------------- INT 10 - VIDEO - READ LIGHT PEN POSITION (all but PS) AH = 04h Return: AH = 0: light pen switch not activated AH = 1: light pen values in registers DH,DL = row,column of current position CH = raster line (0-199) (EGA) old graphics modes CX = (EGA) raster line (0-nnn) new graphics modes BX = pixel column (0-319 or 0-639) -------------------------------------------------- INT 10 - VIDEO - SELECT DISPLAY PAGE AH = 05h AL = 0-7: new page value for modes 0 & 1 0-3: new page value for modes 2 & 3 80h: read CRT/CPU page registers [PCjr only] 81h: set CPU page register to value in BL [PCjr only] 82h: set CRT page register to value in BH [PCjr only] 83h: set both display registers to values in BH, BL [PCjr only] {Corona/Cordata BIOS v4.10+} 00h: set address of graphics bitmap buffer (video modes 60h,61h) BX = segment of buffer 0Fh: get address of graphics bitmap buffer (video modes 60h,61h) Return: BH = CRT page register (if AL >= 80h) BL = CPU page register (if AL >= 80h) DX = segment of graphics bitmap buffer (video modes 60h,61h; AL=0Fh) -------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE UP AH = 06h AL = number of lines to scroll window (0 = blank whole window) BH = attributes to be used on blanked lines CH,CL = row,column of upper left corner of window to scroll DH,DL = row,column of lower right corner of window -------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE DOWN AH = 07h AL = number of lines to scroll window (0 = blank whole window) BH = attributes to be used on blanked lines CH,CL = row,column of upper left corner of window to scroll DH,DL = row,column of lower right corner of window -------------------------------------------------- INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION AH = 08h BH = display page Return: AL = character AH = attribute of character (alpha modes) -------------------------------------------------- INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS AH = 09h AL = character BH = display page BL = attributes of char (alpha modes) or color (graphics modes) if bit 7 == 1 in graphics mode, character is xor'ed onto screen CX = number of times to write character Note: all characters are displayed, including CR, LF, and BS -------------------------------------------------- INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS AH = 0Ah AL = character BH = display page - alpha mode BL = color of character (graphics mode, PCjr only) if bit 7 == 1 in graphics mode, character is xor'ed onto screen CX = number of times to write character (EGA) in graphics modes, replication count in CX works correctly only if all character written are contains on the same row Note: all characters are displayed, including CR, LF, and BS -------------------------------------------------- INT 10 - VIDEO - SET COLOR PALETTE AH = 0Bh BH = 0 BL = border color (0-15) (text modes) border color and background color (graphics modes) (EGA) BL = border color (0-15) and high-intensity background color (16-31??? maybe should be high nybble?) BH = 1 BL = palette (0-3) -------------------------------------------------- INT 10 - VIDEO - WRITE DOT ON SCREEN AH = 0Ch AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5) if bit 7 set, new color will be XORed with current pixel BH = display page (ignored if mode only supports one page) CX = column DX = row Note: only valid in graphics modes -------------------------------------------------- INT 10 - VIDEO - READ DOT ON SCREEN AH = 0Dh BH = display page (ignored if mode only supports one page) CX = column DX = row Return: AL = color read Note: only valid in graphics modes -------------------------------------------------- INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) AH = 0Eh AL = character BH = display page (alpha modes) BL = foreground color (graphics modes) Note: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted and do the expected things -------------------------------------------------- INT 10 - VIDEO - GET CURRENT VIDEO MODE AH = 0Fh Return: AH = number of columns on screen AL = current video mode (see INT 10h/AH=00h) BH = current active display page Note: if mode was set with bit 7 set ("no blanking"), the returned mode will also have bit 7 set -------------------------------------------------- INT 10 - VIDEO - SET PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA) AH = 10h AL = subfunction 00h set palette register BL = palette register to set BH = color value to store (on MCGA, only BX = 0712h is supported) 01h set border color register BH = color value to store 02h set all palette registers and overscan ES:DX -> 17-byte list bytes 0-15 = values for palette regs. 0-15 byte 16 = value for border color register -------------------------------------------------- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA) AX = 1003h BL = 00h enable intensity = 01h enable blink -------------------------------------------------- INT 10 - VIDEO - GET PALETTE REGISTERS (VGA) AH = 10h AL = subfunction 07h read individual palette register BL = palette register number Return: BH = palette register value 08h read overscan (border color) register Return: BH = value 09h read all palette registers and overscan register ES:DX = buffer address (17 bytes) -------------------------------------------------- INT 10 - VIDEO - GET/SET DAC REGISTERS (EGA, VGA/MCGA) AH = 10h AL = subfunction 10h set individual DAC register BX = register number CH = new value for green (0-63) CL = new value for blue (0-63) DH = new value for red (0-63) 12h set block of DAC registers BX = starting color register CX = number of registers to set ES:DX = Table of 3*CX bytes where each 3 byte group represents one byte each of red, green and blue (0-63) 13h select video DAC color page (VGA only) BL = 00h Select paging mode BH = 00h Select 4 blocks of 64 BH = 01h Select 16 blocks of 16 BL = 01h Select Page BH = page number (00h to 03h) or (00h to 0Fh) (not valid in mode 13h) 15h read individual DAC register BL = palette register number Return: DH = red value CH = green value CL = blue value 17h read block of DAC registers BX = starting palette register CX = number of palette registers to read ES:DX = buffer (3 * CX bytes in size) Return: CX number of red, green and blue triples in buffer 18h *UNDOCUMENTED* set PEL mask BL = new PEL value 19h *UNDOCUMENTED* read PEL mask BL = value read 1Ah read video DAC color-page state (VGA only) Return: BL = paging mode 0 four pages of 64 1 sixteen pages of 16 BH = current page 1Bh perform gray-scale summing BX = starting palette register CX = number of registers to convert -------------------------------------------------- INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA) AH = 11h The following functions will cause a mode set, completely resetting the video environment, but without clearing the video buffer AL = 00h, 10h: load user-specified patterns ES:BP -> user table CX = count of patterns to store DX = character offset into map 2 block BL = block to load in map 2 BH = number of bytes per character pattern AL = 01h, 11h: load ROM monochrome patterns (8 by 14) BL = block to load AL = 02h, 12h: load ROM 8 by 8 double-dot patterns BL = block to load AL = 03h: set block specifier BL = block specifier (EGA/MCGA) bits 0,1 = block selected by chars with attribute bit 3 = 0 bits 2,3 = block selected by chars with attribute bit 3 = 1 (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0 bits 2,3,5 = block selected by attribute bit 3 = 1 AL = 04h, 14h: load ROM 8x16 character set (VGA) The routines called with AL=1xh are designed to be called only immediately after a mode set and are similar to the routines called with AL=0xh, except that: Page 0 must be active. Bytes/character is recalculated. Max character rows is recalculated. CRT buffer length is recalculated. CRTC registers are reprogrammed as follows: R09 = bytes/char-1 ; max scan line (mode 7 only) R0A = bytes/char-2 ; cursor start R0B = 0 ; cursor end R12 = ((rows+1)*(bytes/char))-1 ; vertical display end R14 = bytes/char ; underline loc (*** BUG: should be 1 less ***) -------------------------------------------------- INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA) AH = 11h AL = 20h: set user 8 by 8 graphics characters (INT 1Fh) ES:BP -> user table AL = 21h: set user graphics characters ES:BP -> user table CX = bytes per character BL = row specifier 0: user set DL = number of rows 1: 14 rows 2: 25 rows 3: 43 rows AL = 22h: ROM 8 by 14 set BL = row specifier AL = 23h: ROM 8 by 8 double dot BL = row specifier AL = 24h: load 8x16 graphics characters (VGA/MCGA) BL = row specifier Note: these functions are meant to be called only after a mode set -------------------------------------------------- INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA) AX = 1130h BH = pointer specifier 0: INT 1Fh pointer 1: INT 44h pointer 2: ROM 8 by 14 character font pointer 3: ROM 8 by 8 double dot font pointer 4: ROM 8 by 8 DD font (top half) 5: ROM alpha alternate (9 by 14) pointer Return: ES:BP = specified pointer CX = bytes/character DL = character rows on screen -------------------------------------------------- INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) AH = 12h BL = 10h: return EGA information Return: BH = 0: color mode in effect (3Dx) 1: mono mode in effect (3Bx) BL = 0: 64k bytes memory installed 1: 128k bytes memory installed 2: 192k bytes memory installed 3: 256k bytes memory installed CH = feature bits CL = switch settings BL = 20h: select alternate print screen routine BL = 30h: select vertical resolution for alphanumeric modes (VGA only) AL = 00h 200 scan lines 01h 350 scan lines 02h 400 scan lines Return: AL = 12h if function supported BL = 31h: enable/disable default palette loading (VGA/MCGA) AL = 00h enable default palette loading 01h disable default palette loading Return: AL = 12h if function was supported BL = 32h: enable/disable video addressing (VGA/MCGA) AL = 00h enable video 01h disable video Return: AL = 12h if function was supported BL = 33h: enable/disable default gray-scale summing (VGA/MCGA) AL = 00h enable gray scale summing 01h disable gray scale summing Return: AL = 12h if function was supported BL = 34h: enable/disable alphanumeric cursor emulation (VGA only) AL = 00h enable cursor emulation 01h disable cursor emulation Return: AL = 12h if function was supported BL = 35h: PS/2 display-switch interface AL = 00h initial adapter video off 01h initial planar video on 02h switch active video off 03h switch inactive video on 80h *UNDOCUMENTED* set system board video active flag ES:DX = buffer (128 byte save area if AL = 0, 2 or 3) Return: AL = 12h if function was supported BL = 36h: video refresh control (VGA/PS) AL = 00h enable refresh 01h disable refresh Return: AL = 12h if function supported BX = 5500h ??? (used by ATI and TAXAN) BX = 5502h ??? (used by ATI and TAXAN) -------------------------------------------------- INT 10 - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) AH = 13h AL = mode bit 0: set in order to move cursor after write bit 1: set if string contains alternating characters and attributes BL = attribute if AL bit 1 clear BH = display page number DH,DL = row,column of starting cursor position CX = length of string ES:BP -> start of string Note: recognizes CR, LF, BS, and bell -------------------------------------------------- INT 10 - VIDEO - LOAD LCD CHARACTER FONT (CONVERTIBLE) AH = 14h AL = 0 load user-specified font ES:DI -> character font BH = number of bytes per character BL = 0: load main font (block 0) 1: load alternate font (block 1) CX = number of characters to store DX = character offset into RAM font area AL = 1 load system rom default font BL = 0: load main font (block 0) 1: load alternate font (block 1) AL = 2 set mapping of LCD high intensity attributes BL = 0: ignore high intensity attribute 1: map high intensity to underscore 2: map high intensity to reverse video 3: map high intensity to selected alternate font -------------------------------------------------- INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE) AH = 15h Return: AX = alternate display adapter type 0000h none 5140h LCD 5153h CGA 5151h mono ES:DI -> parameter table word 0: monitor model number 1: vertical pixels per meter 2: horizontal pixels per meter 3: total vertical pixels 4: total horizontal pixels 5: horizontal pixel separation in micrometers 6: vertical pixel separation in micrometers -------------------------------------------------- INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA) AH = 1Ah AL = 00h read display combination code Return: BL = active display code BH = alternate display code 01h set display combination code BL = active display code BH = alternate display code Return: AL = 1Ah if function was supported Display combination codes: 00h no display 01h monochrome adapter w/ monochrome display 02h CGA w/ color display 03h reserved 04h EGA w/ color display 05h EGA w/ monochrome display 06h PGA w/ color display 07h VGA w/ monochrome analog display 08h VGA w/ color analog display 09h reserved 0Ah MCGA w/ digital color display 0Bh MCGA w/ monochrome analog display 0Ch MCGA w/ color analog display FFh unknown display type -------------------------------------------------- INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA) AH = 1Bh BX = implementation type = 0000h return funtionality/state information ES:DI -> 64 byte buffer Return: AL = 1Bh if function supported ES:DI buffer filled 00h address of static funtionality table 04h video mode in effect 05h number of columns 07h length of regen buffer in bytes 09h starting address of regen buffer 0Bh cursor position for page 0 0Dh cursor position for page 1 0Fh cursor position for page 2 11h cursor position for page 3 13h cursor position for page 4 15h cursor position for page 5 17h cursor position for page 6 19h cursor position for page 7 1Bh cursor type 1Dh active display page 1Eh CRTC port address 20h current setting of register (3?8) 21h current setting of register (3?9) 22h number of rows 23h bytes/character 25h DCC of active display 26h DCC of alternate display 27h number of colors supported in current mode 29h number of pages supported in current mode 2Ah number of scan lines active (0,1,2,3) = (200,350,400,480) 2Bh primary character block 2Ch secondary character block 2Dh Miscellaneous flags bit 0 all modes on all displays on 1 gray summing on 2 monochrome display attached 3 default palette loading disabled 4 cursor emulation enabled 5 0 = intensity; 1 = blinking 6 reserved 7 reserved 2Eh to 30h reserved 31h video memory available 00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K 32h save pointer state flags bit 0 512 character set active 1 dynamic save area present 2 alpha font override active 3 graphics font override active 4 palette override active 5 DCC override active 6 reserved 7 reserved 33h to 3Fh reserved State Functionality Table format (16 bytes) 00h modes supported #1 bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported 01h modes supported #2 bit 0 to bit 7 = 1 modes 8,9,A,B,C,D,E,F supported 02h modes supported #3 bit 0 to bit 3 = 1 modes 10,11,12,13 supported bit 4 to bit 7 reserved 03h to 06h reserved 07h scan lines supported bit 0 to bit 2 = 1 if scan lines 200,350,400 supported 08h total number of character blocks available in text modes 09h maximum number of active character blocks in text modes 0Ah miscellaneous function flags #1 bit 0 all modes on all displays function supported 1 gray summing function supported 2 character font loading function supported 3 default palette loading enable/disable supported 4 cursor emulation function supported 5 EGA palette present 6 color palette present 7 color paging function supported 0Bh miscellaneous function flags #2 bit 0 light pen supported 1 save/restore state function 1Ch supported 2 intensity blinking function supported 3 Display Combination Code supported 4-7 reserved 0Ch to 0Dh reserved 0Eh Save pointer function flags bit 0 512 character set supported 1 dynamic save area supported 2 alpha font override supported 3 graphics font override supported 4 palette override supported 5 DCC extension supported 6 reserved 7 reserved 0Fh reserved -------------------------------------------------- INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA) AH = 1Ch CX = requested states bit 0 video hardware 1 BIOS data areas 2 color registers and DAC state 3-15 reserved AL = 0: return state buffer size Return: BX = number of 64 byte blocks needed 1: save video state ES:BX = buffer address 2: restore video state ES:BX = buffer address of previously saved state Return: AL = 1Ch if function supported -------------------------------------------------- INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX) AH = 40h -------------------------------------------------- INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX) AH = 41h -------------------------------------------------- INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX) AH = 42h -------------------------------------------------- INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX) AH = 43h AL = page number (0,1) -------------------------------------------------- INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX) AH = 44h AL = drawing function 00h clear pixels 01h set pixels 02h invert pixels -------------------------------------------------- INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX) AH = 45h AL = page number (0,1) -------------------------------------------------- INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX) AH = 46h DI = x (0-720) BP = y (0-347) Note: function 44h determines operation and function 43h which page to use -------------------------------------------------- INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX) AH = 47h DI = x (0-720) BP = y (0-347) Return: AL = 0 pixel clear AL = 1 pixel set Note: function 43h specifies which page is used -------------------------------------------------- INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX) AH = 48h DI = x (0-720) BP = y (0-347) -------------------------------------------------- INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX) AH = 49h DI = x (0-720) BP = y (0-347) Note: function 48h or 49h specify first point, 44h operation and 43h page to use -------------------------------------------------- INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX) AH = 4Ah -------------------------------------------------- INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX) AH = 4Bh AL = character to display DI = x (0-720) BP = y (0-347) Note: Unlike the other BIOS character functions character position is specified in pixels rather than rows and columns. -------------------------------------------------- INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX) AH = 4Ch -------------------------------------------------- INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX) AH = 4Dh -------------------------------------------------- INT 10 - VIDEO - FILL AREA (Hercules GRAFIX) AH = 4Eh -------------------------------------------------- INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES AX = 6A00h BX = 0 CX = 0 DX = buffer length (may be 0) ES:DI = address of buffer Return: BX = number of bytes stored in buffer CX = bytes required for all descriptions (0 if no DGIS) Note: buffer contains descriptions and addresses of DGIS-compatible display(s) and printer(s) -------------------------------------------------- INT 10 - DGIS - REDIRECT CHARACTER OUTPUT AX = 6A01h CX = 0 ES:DI = address of device to send INT 10 output to Return: CX = 0 output could not be redirected else INT 10h output now routed to requested display -------------------------------------------------- INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE AX = 6A02h ES:DI = 0:0 Return: ES:DI = 0:0 if current display is non-DGIS else address of the current DGIS INT 10 display -------------------------------------------------- INT 10 - VIDEO - SET VIDEO MODE (VEGA EXTENDED EGA/VGA) AX = 6F05h BL = mode (graphics mode if graphics resolution listed) text pixel graphic color disp scrn system resol box resoltn page addr 62h = 800x600 16 VEGA Extended EGA 65h = 1024x768 16 VEGA Extended EGA 66h = 640x400 256 VEGA Extended VGA 67h = 640x480 256 VEGA Extended VGA 68h = 720x540 256 VEGA Extended VGA 69h = 800x600 256 VEGA Extended VGA -------------------------------------------------- INT 10 - VIDEO - GET VIDEO RAM ADDRESS (TANDY 1000) AH = 70h Return: AX = segment address of the following [BX] = offset address of green plane [CX] = segment address of green plane [DX] = segment address of red/blue plane (red offset = 0, blue offset = 4000) -------------------------------------------------- INT 10 - VIDEO - GET INCRAM ADDRESSES (TANDY 1000) AH = 71h Return: AX = segment address of the following [BX] = segment address of INCRAM [CX] = offset address of INCRAM -------------------------------------------------- INT 10 - VIDEO - SCROLL SCREEN RIGHT (TANDY 1000) AH = 72h AL = number of columns blanked at left of window 0 = blank entire window BH = attributes to be used on blank columns CH,CL = row, column of upper left corner of window DH,DL = row, column of lower right corner ------------------------------------------------- INT 10 - VIDEO - SCROLL SCREEN LEFT (TANDY 1000) AH = 73h AL = number of columns blanked at right of window 0 = blank entire window BH = attributes to be used on blank columns CH,CL = row, column of upper left corner of window DH,DL = row, column of lower right corner -------------------------------------------------- INT 10 - VIDEO (DESQview) - SET ??? HANDLER AH = 80h DX = 4456h ('DV') ES:DI -> FAR subroutine to be called on ??? Return: DS = segment of DESQview data structure for video buffer Note: this function is probably meant for internal use only, due to the magic value required in DX the subroutine seems to be called when the DESQview menu is accessed; on entry, AL = 3 or 4 -------------------------------------------------- INT 10 - VIDEO (DESQview) - GET ??? AH = 81h DX = 4456h ('DV') Return: ES = segment of DESQview data structure for video buffer BYTE ES:[0] = current window number in DV 2.0x Note: this function is probably meant for internal use only, due to the magic value required in DX -------------------------------------------------- INT 10 - VIDEO (DESQview) - GET CURRENT WINDOW INFO AH = 82h DX = 4456h ('DV') Return: DS = segment in DESQview for data structure in DV 2.00, BYTE DS:[0] = window number WORD DS:[1] = segment of other data structure WORD DS:[3] = segment of window's object handle ES = segment of DESQview data structure for video buffer AL = current window number AH = ??? BL = direct screen writes 0 program does not do direct writes 1 program does direct writes, so shadow buffer not usable BH = ??? CL = current video mode CH = ??? Note: this function is probably meant for internal use only, due to the magic value required in DX -------------------------------------------------- INT 10 - VIDEO - Compaq Portable Extensions AH = BFh AL = subfunction 00h select external monitor all registers preserved and the internal monitor is blanked and the external monitor is now the active monitor 01h select internal monitor all registers preserved and the external monitor is blanked and the internal monitor is now the active monitor 02h set master mode of the currently active video controller BH = 04h CGA BH = 05h EGA BH = 07h MDA 03h get environment BX = 0000 Return: BH = active monitor 00h = External 01h = Internal BL = master mode 00h = switchable VDU not present 04h = CGA 05h = EGA 07h = MDA CH = 00h (reserved) CL = switchable VDU mode supported bit 0 = CGA supported bits 1,2 = reserved (1) bit 3 = MDA supported bits 4-7 = reserved (1) DH = internal monitor type 00h = none 01h = Dual-mode monitor 02h = 5153 RGB monitor 03h = Compaq Color monitor 04h = 640x400 flat panel DL = external monitor type 00h = none 01h = Dual-mode monitor 02h = 5153 RGB monitor 03h = Compaq Color monitor 04h = 640x400 flat panel 04h set mode switch delay BH = switch 00h = enable delay 01h = disable delay -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - READ ONE REGISTER AH = F0h BL = register number DX = group index Pointer/data chips 00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes 08h Sequencer (5 registers) 3C4h 10h Graphics Controller (9 registers) 3CEh 18h Attribute Controller (20 registers) 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color modes) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh Return: BL = data -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - WRITE ONE REGISTER AH = F1h DX = group index (see function F0h) BL = register number BH = value to write Return: BL = data -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER RANGE AH = F2h CH = starting register number CL = Number of registers (>1) DX = group index 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h ES:BX -> buffer, CL bytes -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER RANGE AH = F3h CH = starting register CL = number of registers (>1) DX = group index 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h ES:BX -> buffer, CL bytes -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET AH = F4h CX = number of registers (>1) ES:BX -> table of records in this format: bytes 1-2 group index Pointer/data chips 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh byte 3 register number (0 for single registers) byte 4 register value -------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET AH = F5h CX = number of registers (>1) ES:BX -> table of records in this format: bytes 1-2 port number Pointer/data chips 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh byte 3 register number (0 for single registers) byte 4 register value ------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - REVERT TO DEFAULT REGISTERS AH = F6h ------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - DEFINE DEFAULT REGISTER TABLE AH = F7h DX = port number Pointer/data chips 00h CRTC (3B4h mono modes, 3D4h color modes) 08h Sequencer 3C4h 10h Graphics Controller 3CEh 18h Attribute Controller 3C0h Single registers 20h Miscellaneous Output register 3C2h 28h Feature Control register (3BAh mono modes, 3DAh color modes) 30h Graphics 1 Position register 3CCh 38h Graphics 2 Position register 3CAh ES:BX address of table of one byte entries, one byte to be written to each register ------------------------------------------------- INT 10 - Microsoft Mouse driver EGA support - INTERROGATE DRIVER AH = FAh BX = 0 Return: BX = 0 if mouse driver not present ES:BX -> EGA Register Interface version number, if present: byte 1 = major release number byte 2 = minor release number ------------------------------------------------- INT 10 - VIDEO (TopView) - GET VIDEO BUFFER AH = FEh ES:DI = segment:offset of assumed video buffer Return: ES:DI = segment:offset of actual video buffer -------------------------------------------------- INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER AH = FFh CX = number of sequential characters that have been modified DI = offset of first character that has been modified ES = segment of video buffer Note: avoid CX=0