home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-11-07 | 136.2 KB | 2,968 lines |
-
- ** Programmer's Technical Reference for MSDOS and the IBM PC **
- ┌─────────────────────────────┐
- │ Shareware Version, 10/26/90 │
- │ Please Register Your Copy │
- └─────────────────────────────┘
- Copyright (c) 1987, 1990 Dave Williams
- USA copyright TXG 392-616
- ISBN 1-878830-02-3 (disk-based text)
-
-
- C H A P T E R T H R E E
-
- THE PC ROM BIOS - Interrupts 10h through 19h
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 10h Video I/O - services to handle video output │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0040h) The ROM video routines in the original PC BIOS are designed for
- use with the Color Graphics Adapter and incorporate code to test
- for the horizontal retrace before writing. The check is
- performed no matter what actual display adapter is installed.
- The ROM character table for the first 128 characters is located
- at 0FA6Eh in the PC. Int 01Fh can be used to point to a second
- table of 128 characters.
- CS, SS, DS, ES, BX, CX, DX are preserved during call. All
- others are destroyed.
-
- Function 00h Determine or Set Video State
- entry AH 00h set video mode
- AL display mode: CGA|PCjr|MDA|MCGA|EGA|VGA|8514
- 00h 40x25 B/W text CGA|PCjr| | |EGA| |
- 16 color 40x25, 320x400 graphics | | |MCGA| | |
- 16 color 40x25, 360x400 graphics | | | | |VGA|
- 16 color 01h 40x25 color text CGA|PCjr| | |EGA| |
- 02h 80x25 B/W text CGA|PCjr| | |EGA| |
- 16 color 80x25 640x400 graphics | | |MCGA| | |
- 16 color 80x25 720x400 graphics | | | |VGA| |
- 16 color 03h 80x25 color text CGA|PCjr| | |EGA|VGA|
- 4 color 04h 320x200 color graphics CGA|PCjr| | |EGA| |
- 4 tone gray 05h 320x200 B/W graphics CGA|PCjr| | |EGA| |
- 2 color 06h 640x200 B/W graphics CGA|PCjr| | |EGA| |
- monochrome 07h 80x25 monochrome text | |MDA| |EGA| |
- 16 color 08h 160x200 color graphics CGA|PCjr| | | | |
- 16 color 09h 320x200 color graphics |PCjr| | | |VGA|
- 4 color 0Ah 640x200 color graphics |PCjr| | | | |
- N/A 0Bh BIOS font load | | | |EGA|VGA|
- N/A 0Ch BIOS font load | | | |EGA|VGA|
- 16 color 0Dh 320x200 graphics | | | |EGA|VGA|
- 16 color 0Eh 640x200 graphics | | | |EGA|VGA|
- monochrome 0Fh 640x350 graphics | | | |EGA|VGA|
- 16 & 64 color 10h 640x350 color hi-res | | | |EGA|VGA|
- 2 color 11h 640x480 graphics | | |MCGA| |VGA|
- 16 color 12h 640x480 graphics | | | | |VGA|
- 256 color 13h 320x200 graphics | | |MCGA| |VGA|8514
- 14h-20h used by EGA and VGA graphics modes
- 18h 132x44 8x8 char mono | Tseng Labs EVA
- 19h 132x25 8x14 char mono | Tseng Labs EVA
- 1Ah 132x28 8x13 char mono | Tseng Labs EVA
- monochrome 21h Hercules Graphics, Graphics Page 1
- monochrome 22h Hercules Graphics, Graphics Page 2
- 22h 132x44 | Tseng, Ahead
- 23h 132x25 | Tseng Labs EVA
- 132x25 | Ahead Systems EGA2001
- 132x25 | ATI EGA Wonder
- 24h 132x28 | Tseng Labs EVA
- 25h 80x60 640x480 | Tseng Labs EVA
- 16 color 640x480 | VEGA VGA
- 26h 80x60 | Tseng Labs EVA
- 80x60 640x480 | Ahead Systems EGA2001
- 16 color 27h 720x512 | VEGA VGA
- monochrome 132x25 | ATI EGA Wonder
- 28h unknown | VEGA VGA
- 16 color 29h 800x600 | VEGA VGA
- 256 color 2Dh 640x350 | VEGA VGA
- 256 color 2Eh 640x480 | VEGA VGA
- 256 color 2Fh 720x512 | VEGA VGA
- 256 color 30h 800x600 | VEGA VGA
- unknown | AT&T 6300
- 16 color 36h 960x720 | VEGA VGA
- 16 color 37h 1024x768 | VEGA VGA
- monochrome 132x44 | ATI EGA Wonder
- 2 color 40h 640x400 | AT&T 6300
- 80x43 | VEGA VGA
- 16 color 41h 640x200 | AT&T 6300
- 132x25 | VEGA VGA
- 16 color 42h 640x400 | 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 640x400 | AT&T 6300
- 4Dh 120x25 | VEGA VGA
- 4Eh 120x43 | VEGA VGA
- 4Fh 132x25 | VEGA VGA
- monochrome 50h 132x25 | Ahead Systems EGA2001
- 16 color 640x480 | Paradise EGA-480
- monochrome 80x43 | VEGA VGA
- 640x480 mono? | Taxan 565 EGA
- 51h 80x30 | Paradise EGA-480
- monochrome 132x25 | VEGA VGA
- 640x480 ? | ATI EGA Wonder
- monochrome 52h 132x44 | Ahead Systems EGA2001
- monochrome 132x43 | VEGA VGA
- 752x410 ? | ATI EGA Wonder
- 53h 800x560 ? | ATI EGA Wonder
- 54h 132x43 | Paradise EGA-480
- 16 color 132x43 | Paradise VGA
- 16 color 132x43 | Paradise VGA on multisync
- 132x43 | Taxan 565 EGA
- 55h 132x25 | Paradise EGA-480
- 16 color 132x25 | Paradise VGA
- 16 color 132x25 | Paradise VGA on multisync
- 132x25 | Taxan 565 EGA
- 56h 132x43 | NSI Smart EGA+
- 132x43 | Paradise VGA
- 132x43 | Paradise VGA on multisync
- monochrome 132x43 | Taxan 565 EGA
- 57h 132x25 | NSI Smart EGA+
- 132x25 | Paradise VGA
- 132x25 | Paradise VGA on multisync
- monochrome 132x25 | Taxan 565 EGA
- 58h 100x75 800x600 16/256k | Paradise VGA
- 59h 100x75 800x600 | Paradise VGA
- 5Eh 640x400 | Paradise VGA,VEGA VGA
- 5Fh 640x480 | Paradise VGA
- 60h 80x? ?x400 | Corona/Cordata BIOS v4.10+
- 752x410 | VEGA VGA
- 60h 400 line graphics+80 col text |(Corona/Cordata)
- 61h 400 line graphics | Corona/Cordata BIOS v4.10+
- 720x540 | VEGA VGA
- 62h 800x600 | VEGA VGA
- 16 color 71h 100x35 800x600 | NSI Smart EGA+
- 74h 640x400 graphics | Toshiba 3100
- 7Eh Special Mode Set | Paradise VGA (see below)
- BX horizontal dimension of the mode desired
- CX vertical dimension of the mode desired
- (both BX/CX in pixels for graphics modes, rows
- for text modes)
- DX number of colors of the mode desired
- (use 0 for monochrome modes)
- return BH 7Eh if successful
- 7Fh Special Function Set | Paradise VGA (see below)
- BH 00h Set VGA Operation
- 01h Set Non-VGA Operation
- 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
- 03h Lock Current Mode
- Allows current mode (VGA or non-VGA) to
- survive reboot.
- BH 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
- write paradise registers 0,1,2,3,4,5
- (port 03CEh indexes 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 indexes A,B,C,D,E,F)
- return BL value of the Paradise register
- BH 7Fh if successful.
- note 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.
- 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 | DEC VAXmate AT&T mode
- unknown 640x225 | Z-100
- unknown 640x400 | Z-100
-
- note 1) If the high bit in AL is set, the display buffer is not cleared when a
- new mode is selected. This may be used to mix modes on the display;
- for example, characters of two difference sizes might be displayed
- 2) Modes 8-10 are available on the PCjr, Tandy 1000, and PS/2
- 3) IBM claims 100% software and hardware emulation of the CGA with the
- MCGA chipset. All registers may be read and written as CGA. All
- characters are double-scanned to give 80x25 with 400 line resolution.
- The attributes for setting border color may be set on MCGA, but the
- borders will remain the default color (they cannot actually be set)
- 4) The IBM Color Graphics Adapter (CGA) is too slow for the screen to
- be updated before the vertical retrace of the monitor is completed.
- If the video RAM is addressed directly, the screen will have "snow"
- or interference. IBM's default is to turn the adapter off when it is
- being updated, ie "flickering" when the display is scrolled.
- 5) The vertical retrace signal may be ignored when using the MCGA adapter.
- The MCGA will not generate snow when written to. There is no flicker
- with the MCGA.
- 6) The PCjr Video Gate Array uses a user-defined block of main system RAM
- from 4 to 32k in size instead of having dedicated memory for the
- display. Vertical retrace may be ignored when writing to the PCjr.
- There is no flicker with the PCjr display.
- 7) The Hercules Graphics Card has 750x348 resolution
- 8) The Hercules Graphics Card takes 64k beginning at B:000 (same as MDA)
- 9) The CGA, MCGA, and VGA adapters use hardware address B:800
- 10) The BIOS clears the screen when the mode is set or reset.
- 11) For AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
- 40h, or 44h
- 12) Int 10 will take the shapes of the first 128 characters (00h-7Fh) from
- the table located in ROM at absolute address F000:FA6E. The EGA and VGA
- have hardware capability to change this.
-
-
- Function 01h Set Cursor Type - set the size of the cursor or turn it off
- entry AH 01h
- CH bit values:
- bits 0-4 top line for cursor in character cell
- bits 5-6 blink attribute
- 00 normal
- 01 invisible (no cursor)
- 10 slow (not used on original IBM PC)
- 11 fast
- CL bit values:
- bits 0-4 bottom line for cursor in character cell
- return none
- note 1) The ROM BIOS default cursors are: start end
- monochrome mode 07h: 11 12
- text modes 00h-03h: 6 7
- 2) The blinking in text mode is caused by hardware and cannot be turned
- off, though some kludges can temporarily fake a nonblinking cursor
- 3) The cursor is automatically turned off in graphics mode
- 4) Another method of turning off the cursor in text mode is to position it
- to a nondisplayable address, such as (X,Y)=(0,25)
- 5) Buggy on EGA systems - BIOS remaps cursor shape in 43 line modes, but
- returns unmapped cursor shape
-
-
- Function 02h Set Cursor Position - reposition the cursor to (X,Y)
- entry AH 02h
- BH video page
- 00h graphics mode
- 03h modes 2 and 3
- 07h modes 0 and 1
- DH row (Y=0-24)
- DL column (X=0-79 or 0-39)
- return none
- note 1) (0,0) is upper left corner of the screen
-
-
- Function 03h Read Cursor Position - return the position of the cursor
- entry AH 03h
- BH page number
- 00h in graphics modes
- 03h in modes 2 & 3
- 07h in modes 0 & 1
- return CH top line for cursor (bits 4-0)
- CL bottom line for cursor (bits 4-0)
- DH row number (Y=0-24)
- DL column number (X=0-79 or 0-39)
-
-
- Function 04h Read Light Pen - fetch light pen information
- entry AH 04h
- return AH 00h light pen not triggered
- AH 01h light pen is triggered, values in resgisters
- BX pixel column (X=0-319 or 0-639) graphics mode
- CH raster line (Y=0-199) old graphics modes
- CX (EGA) raster line (0-nnn) new graphics modes
- DH row of current position (Y=0-24) text mode
- DL column of current position (X=0-79 or 0-39) text mode
- note Not supported on PS/2
-
-
- Function 05h Select Active Page - set page number for services 6 and 7
- entry AH 05h
- AL number of new active page
- 0-7 modes 00h and 01h (CGA)
- 0-3 modes 02h and 03h (CGA)
- 0-7 modes 02h and 03h (EGA)
- 0-7 mode 0Dh (EGA)
- 0-3 mode 0Eh (EGA)
- 0-1 mode 0Fh (EGA)
- 0-1 mode 10h (EGA)
- 0 set address of graphics bitmap buffer (modes 60h,61h)
- BX segment of buffer
- 0Fh get address of graphics bitmap buffer (modes 60h,61h)
- BX segment of buffer
- for PCjr only:
- AL 80h to read CRT/CPU page registers
- 81h to set CPU page register to value in BL
- 82h to set CRT page register to value in BH
- 83h to set both CPU and page registers
- (and Corona/Cordata BIOS v4.10+)
- BH CRT page number for subfunctions 82h and 83h
- BL CPU page register for subfunctions 81h and 83h
- return standard PC none
- PCjr if called with AH bit 7=1 then
- 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)
- note 1) Mono adapter has only one display page
- 2) CGA has four 80x25 text pages or eight 40x25 text pages
- 3) A separate cursor is maintained for each display page
- 4) Switching between pages does not affect their contents
- 5) Higher page numbers indicate higher memory positions
-
-
- Function 06h Scroll Page Up - scroll up or clear a display "window"
- entry AH 06h
- AL number of lines blanked at bottom of page
- 0 = blank entire window
- BH attributes to be used on blank line
- CH row (Y) of upper left corner or window
- CL column (X) of upper left corner of window
- DH row (Y) of lower right corner of window
- DL column (X) of lower right corner of window
- return none
- note 1) Push BP before scrolling, pop after
- 2) If in CGA text mode, affects current page only
-
-
- Function 07h Scroll Page Down - scroll down or clear a display "window"
- entry AH 07h
- AL number of lines to be blanked at top of page
- 0 = blank entire window
- BH attributes to be used on blank line
- CH row (Y) of upper left corner or window
- CL column (X) of upper left corner of window
- DH row (Y) of lower right corner of window
- DL column (X) of lower right corner of window
- return none
- note 1) Push BP before scrolling, pop after
- 2) If in CGA text mode, affects current page only
-
-
- Function 08h Read Character Attribute - of character at current cursor pos.
- entry AH 08h
- BH display page number - text mode
- return AH character attribute - text mode
- AL ASCII code of character at current cursor position
-
-
- Function 09h Write Character and Attribute - at current cursor position
- entry AH 09h
- AL ASCII code of character to display
- BH display page number - text mode
- BL attribute/color of character
- CX number of characters to write
- return none
- note 1) CX should not exceed actual rows availible, or results may be erratic
- 2) Setting CX to zero will cause runaway
- 3) All values of AL result in some sort of display; the various control
- characters are not recognized as special and do not change the current
- cursor position
- 4) Does not change cursor position when called - the cursor must be
- advanced with int 10 function 0Ah.
- 5) If used to write characters in graphics mode with bit 7 of AH set to 1
- the character will by XORed with the current display contents.
- 6) In graphics mode the bit patterns for ASCII character codes 80h-0FFh
- are obtained from a table. On the standard PC and AT, the location is at
- interrupt vector 01Fh (0000:007C). For ASCII characters 00h-07Fh, the
- table is at an address in ROM. On the PCjr the table is at interrupt
- vector 44h (0000:00110) and is in addressable RAM (may be replaced by
- the user)
- 7) All characters are displayed, including CR, LF, and BS
-
-
- Function 0Ah Write Character - display character(s) (use current attribute)
- entry AH 0Ah
- AL ASCII code of character to display
- BH display page - text mode
- BL color of character (graphics mode, PCjr only)
- CX number of times to write character
- return none
- note 1) CX should not exceed actual rows availible, or results may be erratic
- 2) All values of AL result in some sort of display; the various control
- characters are not recognized as special and do not change the current
- cursor position
- 3) If used to write characters in graphics mode with bit 7 of AH set to 1
- the character will by XORed with the current display contents.
- 4) In graphics mode the bit patterns for ASCII character codes 80h-0FFh
- are obtained from a table. On the standard PC and AT, the location is at
- interrupt vector 01Fh (0000:007C). For ASCII characters 00h-07Fh, the
- table is at an address in ROM. On the PCjr the table is at interrupt
- vector 44h (0000:00110) and is in addressable RAM (may be replaced by
- the user)
- 5) In EGA in graphics modes, replication count in CX works correctly only
- if all characters written are contained on the same row
- 6) All characters are displayed, including CR, LF, and BS
-
-
- Function 0Bh Set Color Palette - set palette for graphics or text border
- entry AH 0Bh
- BH 00h select border (text mode)
- BL color 0-15, 16-31 for high-intensity characters
- BH 01h set graphics palette with value in BL
- (CGA) BL 0 green/red/yellow
- 1 cyan/magenta/white
- (EGA) (graphics modes)
- BH 0
- BL has border color (0-15) & high intensity bkgr'd color (16-31)
- BH 1
- BL contains palette being selected (0-1)
- return none
- note 1) Valid in CGA mode 04h, PCjr modes 06h, 08h-0Ah
- 2) Although the registers in the MCGA may be set as if to change the
- border, the MCGA will not display a border no matter what register
- settings are used.
-
-
- Function 0Ch Write Dot - plot one graphics pixel
- entry AH 0Ch
- AL dot color code (0/1 in mode 6, 0-3 in modes 4 and 5)
- (set bit 7 to XOR the dot with current color)
- 0-3 mode 04h, 05h
- 0-1 mode 06h
- BH page number (ignored if adapter supports only one page)
- CX column (X=0000h - 027Fh)
- (0 - 319 in modes 4,5,13, 0 - 639 in modes 6,14,15,16)
- DX row (Y=0000h - 00C7h) (0 - 199 CGA)
- return none
- note Video graphics modes 4-6 only
-
-
- Function 0Dh Read Dot - determine the color of one graphics pixel
- entry AH 0Dh
- CX column (X=0000h - 027Fh) (0-319 or 639)
- DX row (Y=0000h - 00C7h) (0-199)
- return AL color of dot
- note Only valid in graphics mode
-
-
- Function 0Eh Write TTY - write one character and update cursor. Also handles
- CR (0Dh), beep (07h), backspace (10h), and scrolling
- entry AH 0Eh
- AL ASCII code of character to be written
- BH page number (text)
- BL foreground color (video modes 6 & 7 only) (graphics)
- return none
- note 1) The ASCII codes for bell, backspace, carriage return, and linefeed are
- recognized and appropriate action taken. All other characters are
- written to the screen and the cursor is advanced to the next position
- 2) Text can be written to any CGA page regardless of current active page
- 3) Automatic linewrap and scrolling are provided through this function
- 4) This is the function used by the DOS CON console driver.
- 5) This function does not explicitly allow the use of attributes to the
- characters written. Attributes may be provided by first writing an ASCII
- 27h (blank) with the desired attributes using function 09h, then
- overwriting with the actual character using this function. While clumsy
- this allows use of the linewrap and scrolling services provided by
- this function
-
-
- Function 0Fh Return Current Video State - mode and size of the screen
- entry AH 0Fh
- return AH number of character columns on screen
- AL mode currently set (see AH=00h for display mode codes)
- 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
-
-
- Function 10h Set Palette Registers (PCjr, Tandy 1000, EGA, MCGA, VGA)
- entry AH 10h
- AL 00h set individual palette register
- BH color value to store
- BL palette register to set
- (on MCGA, only BX = 0712h is supported)
- 01h set border color palette register
- BH color value to store
- 02h set all palette registers and overscan
- ES:DX pointer to 17-byte list
- bytes 0-15 values for palette regs. 0-15
- byte 16 value for border color register
- 03h toggle blink/intensity bit (Jr, EGA, MCGA, VGA)
- BL 00h enable intensity
- 01h enable blink
- 04h unknown
- 05h unknown
- 06h unknown
- 07h read individual palette register (VGA)
- BL palette register number
- return BH palette register value
- 08h read overscan (order color) register (VGA)
- return BH value
- 09h read all palette registers and overscan register (VGA)
- ES:DX pointer to buffer address (17 bytes)
- 10h set individual video DAC color register (MCGA, VGA)
- BX register number
- CH new value for green (0-63)
- CL new value for blue (0-63)
- DH new value for red (0-63)
- 11h unknown
- 12h set block of video DAC color registers (MCGA, VGA)
- 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 set video DAC color page (VGA)
- BH 00h select 4 blocks of 64
- BH 01h select 16 blocks of 16
- BL 00h select paging mode
- BL 01h select Page
- BH page number (00h to 03h) or (00h to 0Fh)
- (not valid in mode 13h)
- 14h unknown
- 15h read individual video DAC color register (MCGA, VGA)
- BL palette register number
- return DH red value
- CH green value
- CL blue value
- 16h unknown
- 17h read block of video DAC color registers (MCGA, VGA)
- 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)
- return BL paging mode
- 0 four pages of 64
- 1 sixteen pages of 16
- BH current page
- 1Bh perform gray-scale summing (MCGA, VGA)
- BX starting palette register
- CX number of registers to convert
-
- BH color value
- BL if AL=00h palette register to set (00h-0Fh)
- if AL=03h 0 to enable intensity
- 1 to enable blinking
- ES:DX if AL=02h pointer to 16-byte table of register values
- followed by the overscan value:
- bytes 0-15 values for palette registers 0-15
- byte 16 value for border register
- return none
- note DAC is Digital to Analog Convertor circuit in MCGA/VGA chips
-
-
- Function 11h Character Generator Routine (EGA and after)
- entry 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
- BH number of bytes per character pattern
- BL block to load in map 2
- CX count of patterns to store
- DX character offset into map 2 block
- ES:BP pointer to user table
- 01h, 11h load ROM monochrome patterns (8 by 14)
- BL block to load
- 02h, 12h load ROM 8 by 8 double-dot patterns
- BL block to load
- 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
- 04h,14h load 8x16 text character set (MCGA, VGA)
- The routines called with AL=1x are designed to be
- called only immediately after a mode set and are
- similar to the routines called with AL=0x, 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:
- reg09h bytes/char-1; max scan line (mode 7 only)
- reg0Ah bytes/char-2; cursor start
- reg0Bh 0 ; cursor end
- reg12h ((rows+1)*(bytes/char))-1
- ; vertical display end
- reg14h bytes/char ; underline loc
- (* BUG: should be 1 less *)
-
- The following functions are meant to be called only
- after a mode set:
- 20h user 8 by 8 graphics characters (int 1Fh)
- ES:BP pointer to user table
- 21h user graphics characters
- ES:BP pointer to 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
- 22h ROM 8 by 14 set
- BL row specifier
- 23h ROM 8 by 8 double dot
- BL row specifier
- 24h load 8x16 graphics characters (MCGA, VGA)
- BL row specifier
-
- 30h Get Font Information (EGA, MCGA, VGA)
- 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 text alternate (9 by 14) pointer
- return ES:BP specified pointer value
- CX bytes/character
- DL character rows on screen
-
-
- Function 12h Alternate Select (EGA and after)
- entry AH 12h
- BL 10h return EGA information
- return BH 00h if color mode is in effect (3Dx)
- 01h if mono mode is in effect (3Dx)
- BL 00h if 64k EGA memory
- 01h if 128k EGA memory
- 02h if 192k EGA memory
- 03h if 256k EGA memory
- CH feature bits
- CL switch settings
- 20h select alternate print screen routine
- 30h select vertical resolution for text modes (VGA)
- AL 00h 200 scan lines
- 01h 350 scan lines
- 02h 400 scan lines
- return AL 12h if function supported
- 31h enable/disable default palette loading (MCGA, VGA)
- AL 00h enable default palette loading
- 01h disable default palette loading
- return AL 12h if function was supported
- 32h enable/disable video addressing (MCGA, VGA)
- AL 00h enable video
- 01h disable video
- return AL 12h if function was supported
- 33h enable/disable default gray scale summing (MCGA, VGA)
- AL 00h enable gray scale summing
- 01h disable gray scale summing
- return AL 12h if function was supported
- 34h enable/disable text cursor emulation (VGA)
- AL 00h enable cursor emulation
- 01h disable cursor emulation
- return AL 12h if function was supported
- 35h display-switch interface (PS/2)
- 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
- 36h video refresh control (VGA)
- 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)
-
-
- Function 13h Enhanced String Write (AT, XT/286, PS/2)
- entry AH 13h
- AL 00h Write String, Don't Move Cursor
- 01h Write String, Move Cursor
- 02h Write String of Alternating Characters and Attributes;
- Don't Move Cursor
- bit 0: set in order to move cursor after write
- bit 1: set if string contains alternating chars and
- attributes
- 03h Write String of Alternating Characters and Attributes;
- Move Cursor
- bit 0: set in order to move cursor after write
- bit 1: set if string contains alternating characters
- and attributes
- BH display page number
- BL attribute if AL bit 1 clear
- CX length of string
- DH row of starting cursor position
- DL column of starting cursor position
- ES:BP pointer to start of string
- return none
- note Recognizes CR, LF, BS, and bell
-
-
- Function 14h Load LCD Character Font (Convertible)
- entry AH 14h
- AL 00h load user specified font
- BH number of bytes per character
-
- BL 00h load main font (block 0)
- 01h load alternate font (block 1)
- CX number of characters to store
- DX character offset into RAM font area
- ES:DI pointer to character font
- AL 01h load system ROM default font
- BL 00h load main font (block 0)
- 01h load alternate font (block 1)
- AL 02h set mapping of LCD high intensity attribute
- BL 00h ignore high intensity attribute
- 01h map high intensity to underscore
- 02h map high intensity to reverse video
- 03h map high intensity to seleected alternate font
- return unknown
-
-
- Function 15h Return Physical Display Parameters (Convertible)
- entry AH 15h
- return AX Alternate display adapter type
- ES:DI pointer to parameter table:
- word # information
- 01h monitor model number
- 02h vertical pixels per meter
- 03h horizontal pixels per meter
- 04h total number of vertical pixels
- 05h total number of horizontal pixels
- 06h horizontal pixel separation in micrometers
- 07h vertical pixel separation in micrometers
-
-
- Function 1Ah Display Combination Code (MCGA, VGA)
- Using the compatibility BIOS of the PS/2 Models 50, 60, 80 there
- is a way to determine which video controller and attached
- display are on the system. The Display Combination Code (DCC)
- is a Video BIOS function that provides the capability.
- entry AH 1Ah
- AL 00h read display combination code
- 01h write display combination code
- return AL 1Ah indicates Compatibility BIOS is supported,
- any other value is invalid
- BH Display Combination Code (DCC)
- 00h no display
- 01h IBM monochrome adapter and display
- 02h IBM color/graphics monitor adapter w/color display
- 03h reserved
- 04h IBM EGA, color display
- 05h IBM EGA, monochrome display
- 06h IBM PGA, color display
- 07h VGA, analog monochrome display
- 08h VGA, analog color display
- 09h reserved
- 0Ah MCGA, digital color display
- 0Bh MCGA, analog monochrome display
- 0Ch MCGA, analog color display
- 0FFh unknown display type
- BL active display device code
- note This function may be used to test for VGA, since it is not supported in
- earlier adapters. If AL is still 1Ah when the call completes, a VGA
- compatible adapter is present.
-
-
- Function 1Bh Functionality/State Information (MCGA, VGA)
- entry AH 1Bh
- BX implementation type
- 0000h return funtionality/state information
- ES:DI pointer to 64 byte buffer
- return AL 1Bh if function supported
- ES:DI buffer filled
- 00h address of functionality table
- 01h unknown
- 02h unknown
- 03h unknown
- 04h current video mode
- 05h number of columns
- 06h unknown
- 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 byte
- 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 byte
- bit 0 512 character set active
- 1 dynamic save area present
- 2 alphanumeric font override active
- 3 graphics font override active
- 4 palette override active
- 5 DCC override active
- 6 reserved
- 7 reserved
- 33h to 3Fh reserved
- note 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 text font override supported
- 3 graphics font override supported
- 4 palette override supported
- 5 DCC extension supported
- 6 reserved
- 7 reserved
- 0Fh reserved
-
-
- Function 1Ch Save/Restore Video State (VGA)
- entry AH 1Ch
- AL 00h return state buffer size
- 01h save video state
- ES:BX buffer address
- 02h restore video state
- ES:BX buffer address of previously saved state
- CX requested states
- bit 0 video hardware
- 1 BIOS data areas
- 2 color registers and DAC state
- 3-15 reserved
- return AL 1Ch if function supported
- BX number of 64 byte blocks needed (function 00h)
- note VGA only
-
-
- Function 40h Set Graphics Mode (Hercules Graphics Card Plus)
- entry AH 40h
- return unknown
-
-
- Function 41h Set Text Mode (Hercules Graphics Card Plus)
- entry AH 41h
- return unknown
-
-
- Function 42h Clear Current Page (Hercules Graphics Card Plus)
- entry AH 42h
- return unknown
-
-
- Function 43h Select Drawing Page (Hercules Graphics Card Plus)
- entry AH 43h
- AL page number (0,1)
- return unknown
-
-
- Function 44h Select Drawing Function (Hercules Graphics Card Plus)
- entry AH 44h
- AL 0 clear pixels
- 1 set pixels
- 2 invert pixels
- return unknown
-
-
- Function 45h Select Page to Display (Hercules Graphics Card Plus)
- entry AH 45h
- AL page number (0,1)
- return unknown
-
-
- Function 46h Draw One Pixel (Hercules Graphics Card Plus)
- entry AH 46h
- DI x (0-720)
- BP y (0-347)
- return unknown
- note Function 44h determines operation and function 43h which page to use.
-
-
- Function 47h Find Pixel Value (Hercules Graphics Card Plus)
- entry AH 47h
- DI x (0-720)
- BP y (0-347)
- return AL 0 pixel clear
- 1 pixel set
- note Function 43h specifies page that is used.
-
-
- Function 48h Move to Point (Hercules Graphics Card Plus)
- entry AH 48h
- DI x (0-720)
- BP y (0-347)
- return unknown
-
-
- Function 49h Draw to Point (Hercules Graphics Card Plus)
- entry AH 49h
- DI x (0-720)
- BP y (0-347)
- return unknown
- note Function 48h or 49h specify first point, 44h operation and 43h page
- to use.
-
-
- Function 4Ah Block Fill (Hercules Graphics Card Plus)
- entry AH 4Ah
- return unknown
-
-
- Function 4Bh Display Character (Hercules Graphics Card Plus)
- entry AH 4Bh
- AL ASCII code for character to display
- DI x (0-720)
- BP y (0-347)
- return unknown
- note Unlike the other BIOS character functions character position is
- specified in pixels rather than rows and columns.
-
-
- Function 4Ch Draw Arc (Hercules Graphics Card Plus)
- entry AH 4Ch
- return unknown
-
-
- Function 4Dh Draw Circle (Hercules Graphics Card Plus)
- entry AH 4Dh
- return unknown
-
-
- Function 4Eh Fill Area (Hercules Graphics Card Plus)
- entry AH 4Eh
- return unknown
-
-
- Function 6Ah Direct Graphics Interface Standard (DGIS)
- entry AH 6Ah
- AL 00h Inquire Available Devices
- 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 req'd for all descriptions (0 if no DGIS)
- note Buffer contains descriptions and addresses of DGIS-
- compatible display(s) and printer(s)
- 01h Redirect Character Output
- 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
- 02h Inquire int 10 Output Device
- ES:DI 0:0
- return ES:DI 0:0 if current display is non-DGIS
- else address of the current DGIS INT 10 display
-
-
- Function 6Fh Set Video Mode (VEGA Extended EGA/VGA)
- entry AH 6F
- AL 05h
- 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
-
-
- Function 70h Get Video RAM Address (Tandy 1000)
- entry AH 70h
- return AX segment addresses of the following
- BX offset address of green plane
- CX segment address of green plane
- DX segment address of red/blue plane
- note (red offset = 0, blue offset = 4000)
-
-
- Function 71h Get INCRAM Addresses (Tandy 1000)
- entry AH 71h
- return AX segment address of the following
- BX segment address of INCRAM
- CX offset address of INCRAM
-
-
- Function 72h Scroll Screen Right (Tandy 1000)
- entry AH 72h
- AL number of columns blanked at left of page
- 00h blank window
- BH attributes to be used on blank columns
- CH,CL row, column address of upper left corner
- DH,DL row, column address of lower right corner
-
-
- Function 73h Scroll Screen Left (Tandy 1000)
- entry AH 73h
- AL number of columns blanked at right of page
- 00h blank window
- BH attributes to be used on blank columns
- CH,CL row, column address of upper left corner
- DH,DL row, column address of lower right corner
-
-
- Function 80h DESQview - Set (something)
- entry AH 80h
- DX 4456h ('DV')
- ES:DI pointer to FAR subroutine to be called on?
- return DS segment of DESQview data structure for video buffer
- note 1) This function is probably meant for internal use only, due to the magic
- value required in DX
- 2) The subroutine seems to be called when the DESQview menu is accessed
- on entry, AL = 03h or 04h
-
-
- Function 81h DESQview video - Get something?
- entry AH 81h
- DX 4456h ('DV')
- return ES segment of DESQview data structure for video buffer
- byte ES:[0] = current window number
- note This function is probably meant for internal use only, due to the
- magic value required in DX
-
-
- Function 82h DESQview - Get Current Window Info
- entry AH 82h
- DX 4456h ('DV')
- return AH unknown
- AL current window number
- BH unknown
- BL direct screen writes
- 0 program does not do direct writes
- 1 program does direct writes, so shadow buffer not usable
- CH unknown
- CL current video mode
- 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
- note This function is probably meant for internal use only, due to the magic
- value required in DX
-
-
- Function 0F0h Microsoft Mouse driver EGA support - Read One Register
- entry AH 0F0h
- BL register number
- DX group index
- (pointer/data chips)
- 00h CRT Controller (25 reg) 3B4h mono, 3D4h color
- 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, 3DAh color
- 30h graphics 1 position register 3CCh
- 38h graphics 2 position register 3CAh
- return BL data
-
-
- Function 0F1h Microsoft Mouse driver EGA support - Write One Register
- entry AH 0F1h
- DX group index (see function F0h)
- BL register number
- BH value to write
- return BL data
-
-
- Function 0F2h Microsoft Mouse driver EGA support - Read Register Range
- entry AH 0F2h
- 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 pointer to buffer, CL bytes
-
-
- Function 0F3h Microsoft Mouse driver EGA support - Write Register Range
- entry AH 0F3h
- 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 pointer to buffer, CL bytes
-
-
- Function 0F4h Microsoft Mouse driver EGA support - Read Register Set
- entry AH 0F4h
- CX number of registers (>1)
- ES:BX pointer to 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
-
-
- Function 0F5h Microsoft Mouse driver EGA support - Read Register Set
- entry AH 0F5h
- CX number of registers (>1)
- ES:BX pointer to 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
-
-
- Function 0F6h Microsoft Mouse driver EGA support
- Revert to Default Registers
- entry AH 0F6h
- return unknown
-
-
- Function 0F7h Microsoft Mouse driver EGA support
- Define Default Register Table
- entry AH 0F7h
- DX port number
- ES:BX address of table of one byte entries, one byte to be written to
- each register
- (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, 3DAh color)
- 30h graphics 1 position register 3CCh
- 38h graphics 2 position register 3CAh
-
-
- Function 0FAh Microsoft Mouse driver EGA support - Interrogate Driver
- entry AH 0FAh
- BX 00h
- return BX 00h if mouse driver not present
- ES:BX pointer to EGA Register Interface version number, if present:
- byte 1 major release number
- byte 2 minor release number
-
-
- Function 0FEh Get Alternate Screen Buffer Address (text mode only)
- (Topview/DesQview/Taskview)
- entry AH 0FEh
- ES:DI segment:offset of assumed video buffer
- return: ES:DI segment:offset of actual video buffer
- note 1) This alternate video buffer can be written to directly, in the same
- manner as writing to B:000 or B:800. The MT program will manage the
- actual display.
- 2) There is no need to synchronize vertical retrace when writing to the
- alternate buffer; this is managed by the MT program
- 3) If TopView or DESQview is not running, ES:DI is returned unchanged.
- 4) TopView requires that function 0FFh be called every time you write into
- the buffer to tell TopView that something changed
-
-
- Function 0FFh Update Real Display (text mode only) (TopView)
- Update Video Buffer (Topview/DesQview/Taskview)
- entry AH 0FFh
- CX number of sequential characters that have been modified
- DI offset of first character that has been modified
- ES segment of video buffer
- return unknown
- note 1) DesQview supports this call, but does not require it
- 2) Avoid CX=0
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 11h Equipment Check │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0044h) fetch a code describing active peripherals.
- entry AH 11h
- return AX Equipment listing word Bits are:
- 0 number of floppy drives
- 0 no drives
- 1 bootable (IPL) diskette drive installed
- 1 math chip
- 0 no math coprocessor (80x87) present
- 1 math coprocessor (80x87) present
- (PS/2) 2 0 mouse not installed
- 1 mouse installed
- (PC) 2,3 system board RAM
- 0,0 16k (PC-0, PC-1)
- 1,1 64k (PC-2, XT)
- note 1) not commonly used. Set both bits to 1
- 2) both bits always 1 in AT
- 4,5 initial video mode
- 0,0 no video installed (use with dumb terminal)
- 0,1 40x25 color (CGA)
- 1,0 80x25 color (CGA, EGA, PGA, MCGA, VGA)
- 1,1 80x25 monochrome (MDA or Hercules, most super-
- hires mono systems)
- 6,7 number of diskette drives (only if bit 0 1)
- 0,0 1 drives
- 0,1 2 drives
- 1,0 3 drives
- 1,1 4 drives
- 8 0 DMA present
- 1 no DMA (PCjr, some Tandy 1000s, 1400LT)
- 9,A,B number of RS232 serial ports (0-3)
- 0,0,0 none
- 0,0,1 1
- 0,1,0 2
- 0,1,1 3
- 1,0,0 4
- C 0 no game I/O attached
- 1 game I/O attached (default for PCjr)
- D serial accessory installation
- 0 no serial accessories installed
- 1 Convertible - internal modem installed
- 1 PCjr - serial printer attached
- E,F number of parallel printers
- 0,0 none
- 0,1 one (LPT1, PRN)
- 1,0 two (LPT2)
- 1,1 three (LPT3)
- note Models before PS/2 would allow a fourth
- parallel printer. Remapping of the BIOS in the
- PS/2s does not allow the use of LPT4.
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 12h Memory Size │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0048h) get system memory
- return AX number of contiguous 1K RAM blocks
- note 1) This service does not depend on the setting of the motherboard switches
- 2) This is the same value stored in absolute address 04:13h
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 13h Disk I/O - access the disk drives (floppy and hard disk) │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:004Ch) does not try rereading disk if an error is returned
-
-
- Function 00h Reset - reset the disk controller chip
- entry AH 00h
- DL drive (if bit 7 is set both hard disks and floppy disks reset)
- return AH status
- note 1) Forces controller chip to recalibrate read/write heads
- 2) Some systems (Sanyo 55x) this resets all drives
-
-
- Function 01h Get Status of disk system
- entry AH 01h
- DL drive (hard disk if bit 7 set)
- return AL status of most recent operation
- 00h successful completion
- 01h bad command
- 02h address mark not found
- 03h tried to write on write-protected disk
- 04h sector not found
- 05h reset failed (hard disk)
- 06h diskette removed or changed
- 07h bad parameter table (hard disk)
- 08h DMA overrun
- 09h attempt to DMA across 64K boundary
- 0Ah bad sector detected (hard disk)
- 0Bh bad track detected (hard disk)
- 0Ch unsupported track
- 0Dh invalid number of sectors on format (hard disk)
- 0Eh control data address mark detected (hard disk)
- 0Fh DMA arbitration error (hard disk)
- 10h bad CRC/EEC on read
- 11h data ECC corrected
- 20h controller failure
- 40h seek failed
- 80h timeout
- 0AAh drive not ready (hard disk)
- 0BBh undefined error (hard disk)
- 0CCh write fault (hard disk)
- 0E0h status error (hard disk)
- 0FFh sense operation failed (hard disk)
-
-
- Function 02h Read Sectors - read one or more sectors from diskette
- entry AH 02h
- AL number of sectors to read
- BX address of buffer (ES=segment)
- CH track number (0-39 or 0-79 for floppies)
- (for hard disk, bits 8,9 in high bits of CL)
- CL sector number (1 to 18, not value checked)
- DH head number (0 or 1)
- DL drive (0=A, 1=B, etc.) (bit 7=0) (drive 0-7)
- ES:BX address to store/fetch data (buffer to fill)
- [0000:0078] dword pointer to diskette parms
- return CF clear (0) for successful
- set (1) failure
- AH status (00h, 02h, 03h, 04h, 08h, 09h, 10h, 0Ah, 20h,
- 40h, 80h)
- AL number of sectors transferred
- note 1) Number of sectors begins with 1, not 0
- 2) Trying to read zero sectors is considered a programming error; results
- are not defined
-
-
- Function 03h Write Sectors - write from memory to disk
- entry AH 03h
- AL number of sectors to write (1-8)
- CH track number (for hard disk, bits 8,9 in high bits of CL)
- CL beginning sector number
- (if hard disk, high two bits are high bits of track #)
- DH head number
- DL drive number (0-7)
- ES:BX address of buffer for data
- return CF set if error
- AH status (see above)
- AL number of sectors written
- note 1) Number of sectors begins with 1, not 0
- 2) Trying to write zero sectors is considered a programming error; results
- are not defined
-
-
- Function 04h Verify - verify that a write operation was successful
- entry AH 04h
- AL number of sectors to verify (1-8)
- CH track number (for hard disk, bits 8,9 in high bits of CL)
- CL beginning sector number
- DH head number
- DL drive number (0-7)
- return CF set on error
- AH status (see above)
- AL number of sectors verified
-
-
- Function 05h Format Track - write sector ID bytes for 1 track
- entry AH 05h
- AL number of sectors to create on this track
- CH track (or cylinder) number
- CL sector number
- DH head number (0, 1)
- DL drive number (0-3)
- ES:BX pointer to 4-byte address field (C-H-R-N)
- byte 1 = (C) cylinder or track
- byte 2 = (H) head
- byte 3 = (R) sector
- byte 4 = (N) bytes/sector (0 = 128, 1 = 256, 2 = 512, 3 = 1024)
- return CF set if error occurred
- AH status code (see above)
- note Not valid for ESDI hard disks on PS/2
-
-
- Function 06h Hard Disk - format track and set bad sector flags
- (PC2, PC-XT, and Portable)
- entry AH 06h
- AL interleave value (XT only)
- CH cylinder number (bits 8,9 in high bits of CL)
- CL sector number
- DH head
- DL drive
- ES:BX 512 byte format buffer
- the first 2*(sectors/track) bytes contain f,n for each sector
- f 00Fh for good sector
- 80h for bad sector
- n sector number
- return AH status code
-
-
- Function 07h Hard Disk - format the drive starting at the desired track
- (PC2, PC-XT and Portable)
- entry AH 07h
- AL interleave value (XT only) (01h-10h)
- CH cylinder number (bits 8,9 in high bits of CL) (00h-03FFh)
- CL sector number
- DH head number (0-7)
- DL drive number (80h-87h, 80h=C, 81h=D,...)
- ES:BX format buffer, size = 512 bytes
- the first 2*(sectors/track) bytes contain f,n for each sector
- f=00h for good sector
- 80h for bad sector
- n=sector number
- return AH status code (see above)
- note Award AT BIOS routines are extended to handle more than 1024 cylinders.
- AL number of sectors
- CH cylinder numberm low 8 bits
- CL sector number bits 0-5, bits 6-7 are high 2 cylinder bits
- DH head number (bits 0-5) bits 6-7 are extended high cyls (>1024)
- DL drive number (0-1 for diskette, 80h-81h for hard disk)
- ES:BX transfer address
-
-
- Function 08h Read Drive Parameters (XT, CONV, AT, XT/286, PS/2)
- entry AH 08h
- DL drive number (0-2)
- return CF set on error
- AH status code (see above)
- BL drive type (see AH=17h below) (AT/PS2 floppies only)
- CH maximum useable value for cylinder number
- CL maximum useable value for sector number or cylinder number
- DH maximum usable value for head number
- DL number of consecutive acknowledging drives (0-2)
- ES:DI drive parameter table
-
-
- Function 09h Initialize Two Fixed Disk Base Tables (XT, AT, XT/286, PS/2)
- (install nonstandard drive)
- entry AH 09h
- return CF set on error
- AH status code (see above)
- data block definitions:
- +0 maximum number of cylinders (dw)
- +2 maximum number of heads (db)
- +3 starting reduced write current cylinder (dw - XT only)
- +5 starting write precomp cylinder (dw)
- +7 maximum ECC data burst length (db - XT only)
- +8 control byte: Bits
- 0,1,2 ─ drive option
- 3,4,5 - always zero
- 6 - disable ECC retries
- 7 - disable access retries
- note 1) Int 41h points to table for drive 0
- 2) Int 46h points to table for drive 1
- 3) 41h used by XT, 41h and 46h used by AT
-
-
- Function 0Ah Read Long (Hard disk) (XT, AT, XT/286, PS/2)
- entry AH 0Ah
- CH cylinder number (bits 8,9 in high bits of CL)
- CL sector number
- DL drive ID
- DH head number
- ES:BX pointer to buffer to fill
- return CF set on error
- AH status code (see above)
- AL number of sectors actually transferred
- note 1) A "long" sector includes a 4 byte EEC (Extended Error Correction) code
- 2) Used for diagnostics only on PS/2 systems
-
-
- Function 0Bh Write Long (XT, AT, XT/286, PS/2)
- entry AH 0Bh
- CH cylinder (bits 8,9 in high bits of CL)
- CL sector number
- DH head number
- DL drive ID
- ES:BX pointer to buffer containing data
- return CF set on error
- AH status code (see above)
- AL number of sectors actually transferred
- note 1) A "long" sector includes a 4 byte EEC (Extended Error Correction) code
- 2) Used for diagnostics only on PS/2 systems
-
-
- Function 0Ch Seek To Cylinder (except PC, PCjr)
- entry AH 0Ch
- CH cylinder number (bits 8,9 in high bits of CL)
- DH head number
- DL drive ID
- return CF set on error
- AH status code (see above)
- note 1) Positions heads over a particular cylinder
-
-
- Function 0Dh Alternate Disk Reset (except PC, PCjr)
- entry AH 0Dh
- DL drive ID
- return CF set on error
- AH status code (see above)
- note Not for PS/2 ESDI hard disks
-
-
- Function 0Eh Read Sector Buffer (XT, Portable PS/2)
- entry AH 0Eh
- AL number of sectors
- CH cylinder (bits 8,9 in top two bits of CL)
- CL sector number
- DH head number
- DL drive number
- ES:BX pointer to buffer
- return CF set on error
- AH status code (see above)
- AL number of sectors actually transferred
- note 1) Transfers controller's sector buffer. No data is read from the drive
- 2) Used for diagnostics only on PS/2 systems
-
-
- Function 0Fh Write sector buffer (XT, Portable)
- entry AH 0Fh
- AL number of sectors
- CH cylinder (bits 8,9 in top two bits of CL)
- CL sector number
- DH head number
- DL drive number
- ES:BX pointer to buffer
- return CF set if error
- AH status code
- AL number of sectors actually transferred
- note 1) Should be called before formatting to initialize the controller's
- sector buffer.
- 2) Used for diagnostics only on PS/2 systems
-
-
- Function 10h Test For Drive Ready
- entry AH 10h
- DL drive ID
- return CF set on error
- AH status code (see above)
-
-
- Function 11h Recalibrate Drive
- entry AH 11h
- DL drive ID
- return CF set on error
- AH status code (see above)
-
-
- Function 12h Controller RAM Diagnostic (XT, Portable, PS/2)
- entry AH 12h
- return CF set on error
- AH status code (see AH=1 above)
- note Used for diagnostics only on PS/2 systems
-
-
- Function 13h Drive Diagnostic (XT, Portable)
- entry AH 13h
- return CF set on error
- AH status code (see above)
- note Used for diagnostics only on PS/2 systems
-
-
- Function 14h Controller Internal Diagnostic (AT, XT/286)
- entry AH 14h
- return CF set on error
- AH status code (see above)
- note 1) OEM is Western Digital 1003-WA2 hard/floppy combination controller
- in AT and XT/286.
- 2) Used for diagnostics only in PS/2 systems
-
-
- Function 15h Get Disk Type (except PC and XT)
- entry AH 15h
- DL drive ID
- return AH disk type
- 00h no drive is present
- 01h diskette, no change detection present
- 02h diskette, change detection present
- 03h fixed disk
- CX:DX number of 512-byte sectors when AH = 03h
-
-
- Function 16h Change of Disk Status (diskette) (except PC and XT)
- entry AH 16h
- return AH disk change status
- 00h no disk change
- 01h disk changed
- DL drive that had disk change
-
-
- Function 17h Set Disk Type for Format (diskette) (except PC and XT)
- entry AH 17h
- AL 00h no disk
- 01h 360kb diskette in 360Kb drive
- 02h 360kb diskette in 1.2M drive
- 03h 1.2M diskette in 1.2M drive
- 04h 720kb diskette in 720Kb drive
- DL drive number
- return AH status of operation
- note This function is probably enhanced for the PS/2 series to detect
- 1.44 in 1.44 and 720k in 1.44.
-
-
- Function 18h Set Media Type For Format (diskette) (AT, XT/286, PS/2)
- entry AH 18h
- CH lower 8 bits of number of tracks
- CL high 2 bits of number of tracks (6,7) sectors per track
- (bits 0-5)
- DL drive number
- return AH 00h if requested combination supported
- 01h if function not available
- 0Ch if not suppported or drive type unknown
- 80h if there is no media in the drive
- ES:DI pointer to 11-byte parameter table
-
-
- Function 19h Park Hard Disk Heads (XT/286, PS/2)
- entry AH 19h
- DL drive
- return CF set on error
- AH error code
-
-
- Function 1Ah ESDI Hard Disk - Format (PS/2)
- entry AH 1Ah
- AL defect table count
- CL format modifiers
- bits 0 ignore primary defect map
- 1 ignore secondary defect map
- 2 update secondary defect map
- 3 perform surface analysis
- 4 generate periodic interrupt
- DL drive
- ES:BX pointer to defect table
- return CF set on error
- AH status (see AH=1 above)
- note If periodic interrupt selected, int 15h/AH=0Fh is called after each
- cylinder is formatted
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 14h Initialize and Access Serial Port For Int 14 │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0050h) the following status is defined:
-
- serial status byte:
- bits 0 delta clear to send
- 1 delta data set ready
- 2 trailing edge ring detector
- 3 delta receive line signal detect
- 4 clear to send
- 5 data set ready
- 6 ring indicator
- 7 receive line signal detect
-
- line status byte:
- bits 0 data ready
- 1 overrun error
- 2 parity error
- 3 framing error
- 4 break detect
- 5 transmit holding register empty
- 6 transmit shift register empty
- 7 time out note: if bit 7 set then other bits are invalid
-
- All routines have AH=function number and DX=RS232 card number (0 based).
- AL=character to send or received character on exit, unless otherwise noted.
-
- entry AH 00h Initialize And Access Serial Communications Port
- bit pattern: BBBPPSLL
- BBB = baud rate: 110,150,300,600,1200,2400,4800,9600
- PP = parity: 01 = odd, 11 = even
- S = stop bits: 0 = 1, 1 = 2
- LL = word length: 10 = 7-bits, 11 = 8-bits
- AL parms for initialization:
- bit pattern:
- 0 word length
- 1 word length
- 2 stop bits
- 3 parity
- 4 parity
- 5 baud rate
- 6 baud rate
- 7 baud rate
- word length 10 7 bits
- 11 8 bits
- stop bits 0 1 stop bit
- 1 2 stop bits
- parity 00 none
- 01 odd
- 11 even
- baud rate 000 110 baud
- 001 150 baud
- 010 300 baud
- 011 600 baud
- 100 1200 baud
- 101 2400 baud
- 110 4800 baud
- 111 9600 baud (4800 on PCjr)
- DX port number
- return AH line status
- AL modem status
-
-
- Function 01h Send Character in AL to Comm Port DX (0 or 1)
- entry AH 01h
- AL character
- DX port number (0 or 1)
- return AH RS232 status code
- bit 0 data ready
- 1 overrun error
- 2 parity error
- 3 framing error
- 4 break detected
- 5 transmission buffer register empty
- 6 transmission shift register empty
- 7 timeout
- AL modem status
- bit
- 0 delta clear-to-send
- 1 delta data-set-ready
- 2 trailing edge ring detected
- 3 change, receive line signal detected
- 4 clear-to-send
- 5 data-set-ready
- 6 ring received
- 7 receive line signal detected
-
-
- Function 02h Wait For A Character From Comm Port DX
- entry AH 02h
- return AL character received
- AH error code (see above)(00h for no error)
-
-
- Function 03h Fetch the Status of Comm Port DX (0 or 1)
- entry AH 03h
- return AH set bits (01h) indicate comm-line status
- bit 7 timeout
- bit 6 empty transmit shift register
- bit 5 empty transmit holding register
- bit 4 break detected ("long-space")
- bit 3 framing error
- bit 2 parity error
- bit 1 overrun error
- bit 0 data ready
- AL set bits indicate modem status
- bit 7 received line signal detect
- bit 6 ring indicator
- bit 5 data set ready
- bit 4 clear to send
- bit 3 delta receive line signal detect
- bit 2 trailing edge ring detector
- bit 1 delta data set ready
- bit 0 delta clear to send
-
-
- Function 04h Extended Initialize (PC Convertible)
- entry AH 04h
- AL break status
- 01h if break
- 00h if no break
- BH parity
- 00h no parity
- 01h odd parity
- 02h even parity
- 03h stick parity odd
- 04h stick parity even
- BL number of stop bits
- 00h one stop bit
- 01h 2 stop bits (1½ if 5 bit word length)
- CH word length
- 00h 5 bits
- 01h 6 bits
- 02h 7 bits
- 03h 8 bits
- CL baud rate
- 00h 110
- 01h 150
- 02h 300
- 03h 600
- 04h 1200
- 05h 2400
- 06h 4800
- 07h 9600
- 08h 19200
- return AL modem status
- AH line control status
-
-
- Function 05h Extended Communication Port Control (PS/2)
- entry AH 05h
- AL 00h read modem control register
- return BL modem control reg (see AL=1)
- AL 01h write modem control register
- BL modem control register: (for AL=00 and AL=01) bits
- 0 data terminal ready
- 1 request to send
- 2 out1
- 3 out2
- 4 loop
- 5,6,7 reserved
- return AH status
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 15h Cassette I/O │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0054h) Renamed "System Services" on PS/2 line
-
- Function 00h Turn Cassette Motor On (PC, PCjr only)
- entry AH 00h
- return AH 86h no cassette present
- CF set on error
- AH error code
- 00h no errors
- 01h CRC error
- 02h bad tape signals
- no data transitions (PCjr)
- 03h no data found on tape
- not used (PCjr)
- 04h no data
- no leader (PCjr)
- 80h invalid command
- 86h no cassette present
- not valid in PCjr
- note NOP for systems where cassette not supported
-
-
- Function 01h Turn Cassette Motor Off (PC, PCjr only)
- entry AH 01h
- return AH 86h no cassette present
- CF set on error
- AH error code
- note NOP for systems where cassette not supported
-
-
- Function 02h Read Blocks From Cassette (PC, PCjr only)
- entry AH 02h
- CX count of bytes to read
- ES:BX pointer to data buffer
- return CF set on error
- AH error code
- DX count of bytes actually read
- ES:BX pointer past last byte written
- note 1) NOP for systems where cassette not supported
- 2) Cassette operations normally read 256 byte blocks
-
-
- Function 03h Write Data Blocks to Cassette (PC, PCjr only)
- entry AH 03h
- CX count of bytes to write
- ES:BX pointer to data buffer
- return CF set on error
- AH error code (see 02h)
- CX 0
- ES:BX pointer to last byte written+1
- note 1) NOP for systems where cassette not supported
- 2) The last block is padded to 256 bytes with zeroes if needed
- 3) No errors are returned by this service
-
-
- Function 0Fh ESDI Format Unit Periodic Interrupt (PS/2 50, 60, 80)
- entry AH 0Fh
- AL phase code
- 00h reserved
- 01h surface analysis
- 02h formatting
- return CF clear if formatting should continue
- set if it should terminate
- note Called during ESDI drive formatting after each cylinder is completed
-
-
- Function 10h TopView API Function Calls (TopView)
- entry AH 00h PAUSE Give Up CPU Time
- return 00h after other processes run
- 01h GETMEM allocate "system" memory
- BX number of bytes to allocate
- return ES:DI pointer to block of memory
- 02h PUTMEM deallocate "system" memory
- ES:DI pointer to previously allocated block
- return block freed
- 03h PRINTC display character/attribute on screen
- BH attribute
- BL character
- DX segment of object handle for window
- note BX=0 does not display anything, it only
- positions the hardware cursor
- 10h unknown
- AL 04h thru 12h
- return TopView - unimplemented in DV 2.0x
- pops up "Programming error" window in DV 2.0x
- 11h unknown
- 12h unknown
- 13h GETBIT define a 2nd-level interrupt handler
- ES:DI pointer to FAR service routine
- return BX bit mask indicating which bit was
- allocated
- 0 if no more bits available
- 14h FREEBIT undefine a 2nd-level interrupt handler
- BX bit mask from int 15/AH 13h
- 15h SETBIT schedule one or more 2nd-level interrupts
- BX bit mask for interrupts to post
- return indicated routines will be called at next ???
- 16h ISOBJ verify object handle
- ES:DI possible object handle
- return BX -1 if ES:DI is a valid object handle
- 0 if ES:DI is not
- 17h TopView - unimplemented in DV 2.00
- return pops up "Programming Error" window in DV 2.00
- 18h LOCATE Find Window at a Given Screen Location
- BH column
- BL row
- ES segment of object handle for ?
- (0 = use default)
- return ES segment of object handle for window
- which is visible at the indicated
- position
- 19h SOUND Make Tone
- BX frequency in Hertz
- CX duration in clock ticks (18.2 ticks/sec)
- return immediately, tone continues to completion
- note If another tone is already playing, the new tone
- does not start until completion of the previous
- one. In DV 2.00, it is possible to enqueue
- about 32 tones before the process is blocked
- until a note completes.
- In DV 2.00, the lowest tone allowed is 20 Hz
- 1Ah OSTACK Switch to Task's Internal Stack
- return stack switched
- 1Bh BEGINC Begin Critical Region
- return task-switching temporarily disabled
-
- note Will not task-switch until END CRITICAL REGION
- (AH=1Ch) is called
- 1Ch ENDC End Critical Region
- return task-switching enabled
- 1Dh STOP STOP TASK
- ES segment of object handle for task to be stopped
- (= handle of main window for that task)
- return indicated task will no longer get CPU time
- note At least in DV 2.00, this function is ignored
- unless the indicated task is the current task.
- 1Eh START Start Task
- ES segment of object handle for task to be started
- (== handle of main window for that task)
- return Indicated task is started up again
- 1Fh DISPEROR Pop-Up Error Window
- BX bit fields:
- 0-12 number of characters to display
- 13,14 which mouse button may be pressed to
- remove window
- 00 either
- 01 left
- 10 right
- 11 either
- 15 beep if 1
- DS:DI pointer to text of message
- CH width of error window (0 = default)
- CL height of error window (0 = default)
- DX segment of object handle
- return BX status:
- 1 left button pressed
- 2 right button pressed
- 27 ESC key pressed
- note Window remains on-screen until ESC or indicated
- mouse button is pressed
- 20h TopView - unimplemented in DV 2.0x
- return pops up "Programming Error" window in DV 2.0x
- 21h PGMINT Interrupt Another Task
- BX segment of object handle for task to interrupt
- DX:CX address of FAR routine to jump to next time
- task is run
- return nothing?
- note The current ES, DS, SI, DI, and BP are passed
- to the FAR routine
- 22h GETVER Get Version
- BX 00h
- return BX nonzero, TopView or compatible loaded
- BH minor version
- BL major version
- notes TaskView returns BX = 0001h
- DESQview 2.0 returns BX = 0A01h
- 23h POSWIN Position Window
- BX segment of object handle for parent window
- within which to position the window (0 = full
- screen)
- CH # columns to offset from position in DL
- CL # rows to offset from position in DL
- DL bit flags
- 0,1 horizontal position
- 00 current
- 01 center
- 10 left
- 11 right
- 2,3 vertical position
- 00 current
- 01 center
- 10 top
- 11 bottom
- 4 don't redraw screen if set
- 5-7 not used
- ES segment of object handle for window to be
- positioned
- return nothing
- 24h GETBUF Get Virtual Screen Information
- BX segment of object handle for window (0=default)
- return CX size of virtual screen in bytes
- DL 0 or 1, unknown
- ES:DI address of virtual screen
- 25h USTACK Switch Back to User's Stack
- return stack switched back
- note Call only after int 15h,fn1Ah
- 26h-2Ah DesQview (TopView?) - unimplemented in DV 2.0x
- return pops up "Programming Error" window in DV 2.0x
- 2Bh POSTTASK Awaken Task DesQview 2.0 (TopView?)
- BX segment of object handle for task
- return nothing
- 2Ch Start New Application in New Process
- DesQview 2.0 (TopView?)
- ES:DI pointer to contents of .PIF/.DVP file
- BX size of .PIF/.DVP info
- return BX segment of object handle for new task
- 2Dh Keyboard Mouse Control DesQview 2.0
- BL subfunction
- 00h determine whether using keyboard mouse
- 01h turn keyboard mouse on
- 02h turn keyboard mouse off
- return (calling BL was 00h)
- BL 0 using real mouse
- 1 using keyboard mouse
-
-
- Function 11h Topview commands
- entry AH 11h
- AL various
- note In DesQview 2.0x, these function calls are identical to AH=0DEh, so
- see those below
-
-
- Function 20h PRINT.COM (DOS internal) (AT, XT-286, PS/2 50+)
- entry AH 20h
- AL subfunction
- 00h unknown (PRINT)
- 01h unknown (PRINT)
- 10h sets up SysReq routine on AT, XT/286, PS/2
- 11h completion of SysReq routine (software only)
- note 1) AL=0 or 1 sets or resets some flags which affect what PRINT does when
- it tries to access the disk
-
-
- Function 21h Power-On Self Test (POST) Error Log (PS/2 50+)
- entry AH 21h
- AL 00h read POST log
- 01h write POST log
- BH device ID
- BL error code
- return CF set on error
- AH status
- 00h OK
- BX number of error codes stored
- ES:DI pointer to error log
- 01h list full
- 80h invalid command
- 86h unsupported
- note The log is a series of words, the first byte of which identifies the
- error code and the second the device.
-
-
- Function 40h Read/Modify Profiles (Convertible)
- entry AH 40h
- AL 00h read system profile in CX,BX
- 01h write system profile from CX, BX
- 02h read internal modem profile in BX
- 03h write internal modem profile from BX
- BX profile info
- return BX internal modem profile (from 02h)
- CX,BX system profile (from 00h)
-
-
- Function 41h Wait On External Event (Convertible)
- entry AH 41h
- AL condition type
- bits 0-2: condition to wait for
- 0 any external event
- 1 compare and return if equal
- 2 compare and return if not equal
- 3 test and return if not zero
- 4 test and return if zero
- bit 3: reserved
- bit 4: 1=port address, 0=user byte
- bits 5-7: reserved
- BH condition compare or mask value
- condition codes:
- 0 any external event
- 1 compare and return if equal
- 2 compare and return if not equal
- 3 test and return if not zero
- 4 test and return if zero
- BL timeout value times 55 milliseconds
- 0 if no time limit
- DX I/O port address (if AL bit 4 = 1)
- ES:DI pointer to user byte (if AL bit 4 = 0)
-
-
- Function 42h Request System Power Off (Convertible)
- entry AH 42h
- AL 00h to use system profile
- 01h to force suspend regardless of profile
-
-
- Function 43h Read System Status (Convertible)
- entry AH 43h
- return AL status bits:
- 0 LCD detached
- 1 reserved
- 2 RS232/parallel powered on
- 3 internal modem powered on
- 4 power activated by alarm
- 5 standby power lost
- 6 external power in use
- 7 battery low
-
-
- Function 44h (De)activate Internal Modem Power (Convertible)
- entry AH 44h
- AL 00h to power off
- 01h to power on
-
-
- Function 4Fh Keyboard Intercept (except PC, PCjr, and XT)
- entry AH 4Fh
- AL scan code, CF set
- return AL scan code, CF set if processing desired
- note Called by int 9 handler to translate scan codes
-
-
- Function 80h Device Open (AT, XT/286, PS/2)
- entry AH 80h
- BX device ID
- CX process ID
- return CF set on error
- AH status
-
-
- Function 81h Device Close (AT, XT/286, PS/2)
- entry AH 81h
- BX device ID
- CX process ID
- return CF set on error
- AH status
-
-
- Function 82h Program Termination (AT, XT/286, PS/2)
- AH 82h
- BX device ID
- return: CF set on error
- AH status
- note Closes all devices opened with function 80h
-
-
- Function 83h Event Wait (AT, XT/286, Convertible, PS/2)
- entry AH 83h
- AL 00h to set interval
- 10h to cancel
- CX,DX number of microseconds to wait (granularity is 976 microseconds)
- ES:BX pointer to memory flag (bit 7 is set when interval expires)
- (pointer is to caller's memory)
- return CF set (1) if function already busy
-
-
- Function 84h Read Joystick Input Settings (AT, XT/286, PS/2)
- entry AH 84h
- DX 00h to read the current switch settings (return in AL)
- 01h to read the resistive inputs
- return AX A(X) value
- BX A(Y) value
- CX B(X) value
- DX B(Y) value
- AL switch settings (bits 7-4)
-
-
- Function 85h System Request (SysReq) Key Pressed (except PC, PCjr, XT)
- entry AH 85h
- return AL 00h key pressed
- 01h key released
- note Called by keyboard decode routine
-
-
- Function 86h Elapsed Time Wait (except PC, PCjr, XT)
- AH 86h
- CX,DX number of microseconds to wait
- return CF clear after wait elapses
- CF set immediately due to error
- note Only accurate to 977 microseconds
-
-
- Function 87h Extended Memory Block Move (286/386 machines only)
- AH 87h
- CX number of words to move
- ES:SI pointer to Global Descriptor Table (GDT)
- offset 00h null descriptor
- 08h uninitialized, will be made into GDT descriptor
- 10h descriptor for source of move
- 18h descriptor for destination of move
- 20h uninitialized, used by BIOS
- 28h uninitialized, will be made into SS descriptor
- return CF set on error
- AH status
- 00h source copied into destination
- 01h parity error
- 02h interrupt error
- 03h address line 20 gating failed
-
-
- Function 88h Extended Memory Size Determine (AT, XT/286, PS/2)
- entry AH 88h
- return AX # of contiguous 1K blocks of memory starting at address 1024k
-
-
- Function 89h Switch Processor to Protected Mode (AT, XT/286, PS/2)
- entry AH 89h
- BH interrupt number of IRQ 8 (IRQ 9Fh use next 7 interrupts)
- BL interrupt number of IRQ 0 (IRQ 17h use next 7 interrupts)
- CX offset into protected mode CS to jump to
- DS:SI pointer to Global Descriptor Table for protected mode
- offset 00h null descriptor
- 08h GDT descriptor
- 10h IDT descriptor
- 18h DS
- 20h ES
- 28h SS
- 30h CS
- 38h uninitialized, used to build descriptor for
- BIOS CS
- return AH 0FFh error enabling address line 20
- CF set on error
-
-
- Function 90h Device Busy Loop (except PC, PCjr, XT)
- entry AH 90h
- AL type code:
- 00h disk
- 01h diskette
- 02h keyboard
- 03h PS/2 pointing device
- 80h network (ES:BX = pointer to network control block)
- 0FCh hard disk reset (PS/2)
- 0FDh diskette motor start
- 0FEh printer
- ES:BX pointer to request block for type codes 80h through 0BFh
- return CF 1 (set) if wait time satisfied
- 0 (clear) if driver must perform wait
- note Used by NETBIOS
- Type codes are allocated as follows:
- 00h-7Fh non-reentrant devices; OS must arbitrate access
- 80h-BFh reentrant devices; ES:BX points to a unique control block
- C0h-FFh wait-only calls, no complementary int 15, fn91h call
-
-
- Function 91h Set Flag and Complete Interrupt (except PC, PCjr, XT)
- entry AH 91h
- AL type code (see AH=90h above)
- ES:BX pointer to request block for type codes 80h through 0BFh
- return AH 0
- note Used by NETBIOS
-
-
- Function 0C0h Get System Configuration (XT after 1/10/86, PC Convertible,
- XT/286, AT, PS/2)
- entry AH 0C0h
- return CF 1 if BIOS doesn't support call
- ES:BX pointer to ROM system descriptor table
- dword number of bytes in the following table (norm. 16 bytes)
- byte system ID byte; see Chapter 2 for interpretation
- byte secondary ID distingushes between AT and XT/286, etc.
- byte BIOS revision level, 0 for 1st release, 1 for 2nd, etc.
- byte feature information
- 80h DMA channel 3 used by hard disk BIOS
- 40h 2nd 8259 installed
- 20h realtime clock installed
- 10h int 15h, fn 04h called upon int 09h
- 08h wait for external event supported (int 15fn41)
- used on Convertible; reserved on PS/2 systems
- 04h extended BIOS area allocated at 640k
- 03h reserved
- 02h bus is Micro Channel instead of PC
- 01h reserved
- 00h reserved
- byte unknown (set to 0) (reserved by IBM)
- byte unknown (set to 0) (reserved by IBM)
- byte unknown (set to 0)
- byte unknown (set to 0) (Award copyright here)
- note 1) Int 15h is also used for the Multitask Hook on PS/2 machines. No
- register settings availible yet.
- 2) The 1/10/86 XT BIOS returns an incorrect value for the feature byte.
-
-
- Function 0C1h System - Return Extended-BIOS Data-Area Segment Address (PS/2)
- entry AH 0C1h
- return CF set on error
- ES segment of data area
-
-
- Function 0C2h Pointing Device BIOS Interface (DesQview 2.x) (PS/2)
- entry AH 0C2h
- AL 00h enable/disable
- BH 00h disable
- 01h reset
- return BH device ID
- 02h set sampling rate
- BH 00h 10/second
- 01h 20/second
- 02h 40/second
- 03h 60/second
- 04h 80/second
- 05h 100/second
- 06h 200/second
- 03h set resolution
- BH 00h one count per mm
- 01h two counts per mm
- 02h four counts per mm
- 03h eight counts per mm
- 04h get type
- return BH device ID
- 05h initialize
- BH data package size (1 - 8 bytes)
- 06h get/set scaling factor
- BH 00h return device status
- return BL status byte
- bit 0: right button pressed
- bit 1: reserved
- bit 2: left button pressed
- bit 3: reserved
- bit 4: 0=1:1 scaling, 1=2:1 scaling
- bit 5: device enabled
- bit 6: 0=stream mode, 1=remote mode
- bit 7: reserved
- CL resolution (see function 03h)
- DL sample rate, reports per second
- 01h set scaling at 1:1
- 02h set scaling at 2:1
- 07h set device handler address
- ES:BX user device handler
- return AL 00h
- return CF set on error
- AH status
- 00h successful
- 01h invalid function
- 02h invalid input
- 03h interface error
- 04h need to resend
- 05h no device handler installed
- note The values in BH for those functions that take it as input are stored
- in different locations for each subfunction
-
-
- Function 0C3h Enable/Disable Watchdog Timeout (PS/2 50+)
- entry AH 0C3h
- AL 00h disable
- 01h enable
- BX timer counter
- return CF set on error
- note The watchdog timer generates an NMI
-
-
- Function 0C4h Programmable Option Select (PS/2 50+)
- entry AH 04Ch
- AL 00h return base POS register address
- 01h enable slot
- BL slot number
- 02h enable adapter
- return CF set on error
- DX base POS register address (if function 00h)
-
-
- Function 0DEh DesQview Services (DesQview)
- entry AH 0DEh
- AL 00h Get Program Name
- return AX offset into DESQVIEW.DVO of current
- program's record:
- byte length of name
- n bytes name
- 2 bytes keys to invoke program (second
- = 00h if only one key used)
- word ? (I see 0 always)
- byte end flag: 00h for all but last
- entry, which is 0FFh
- 01h Update "Open Window" Menu
- return none
- note Reads DESQVIEW.DVO, disables Open menu if file
- not in current directory
- 02h unimplemented in DV 2.0x
- return nothing (NOP in DV 2.0x)
- 03h unimplemented in DV 2.0x
- return nothing (NOP in DV 2.0x)
- 04h Get Available Common Memory
- return BX bytes of common memory available
- CX largest block available
- DX total common memory in bytes
- 05h Get Available Conventional Memory
- return BX K of memory available
- CX largest block available
- DX total conventional memory in K
- 06h Get Available Expanded Memory
- return BX K of expanded memory available
- CX largest block available
- DX total expanded memory in K
- 07h APPNUM Get Current Program's Number
- return AX number of program as it appears on the
- "Switch Windows" menu
- 08h GET (unknown)
- return AX 0 unknown
- 1 unknown
- 09h unimplemented in DV 2.00
- return nothing (NOP in DV 2.00)
- 0Ah DBGPOKE Display Character on Status Line
- BL character
- return character displayed, next call will display in
- next position (which wraps back to the start of
- the line if off the right edge of screen)
- note 1) Displays character on bottom line of *physical*
- screen, regardless of current size of window
- (even entirely hidden)
- 2) Does not know about graphics display modes,
- just pokes the characters into display memory
- 0Bh APILEVEL Define Minimum API Level Required
- BL API level
- >2 pops up "You need a newer version" error
- window in DV 2.00
- BH unknown
- return AX maximum API level?
- 0Ch GETMEM Allocate "System" Memory
- BX number of bytes
- return ES:DI pointer to allocated block
- 0Dh PUTMEM Deallocate "System" Memory
- ES:DI pointer to previously allocated block
- return nothing
- 0Eh Find Mailbox by Name (DV 2.0+)
- ES:DI pointer to name to find
- CX length of name
- return BX 0 not found
- 1 found
- DS:SI object handle
- 0Fh Enable DesQview Extensions (DV 2.0+)
- return AX and BX destroyed (seems to be bug, weren't
- saved & restored)
- note 1) Sends a manager stream with opcodes AEh, BDh,
- and BFh to task's window
- 2) Enables an additional mouse mode
- 10h PUSHKEY PUT KEY INTO KEYBOARD INPUT STREAM (DV 2.0+)
- BH scan code
- BL character
- return BX unknown (sometimes, but not always,
- same as BX passed in)
- note A later read will get the keystroke as if it
- had been typed by the user
- 11h ENABLE/DISABLE AUTO JUSTIFICATION OF WINDOW (DV 2.0+)
- BL 0 viewport will not move automatically
- nonzero viewport will move to keep cursor
- visible
- return none
- 12h unknown (DV 2.0+)
- BX 0 clear something?
- nonzero set something?
- return none
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 16h Keyboard I/O │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0058h) access the keyboard
-
-
- Function 00h Get Keyboard Input - read the next character in keyboard buffer,
- if no key ready, wait for one.
- entry AH 00h
- return AH scan code
- AL ASCII character
-
-
- Function 01h Check Keystroke Buffer - Do Not Clear
- entry AH 01h
- return ZF 0 (clear) if character in buffer
- 1 (set) if no character in buffer
- AH scan code of character (if ZF=0)
- AL ASCII character if applicable
- note Keystroke is not removed from buffer
-
-
- Function 02h Shift Status - fetch bit flags indicating shift status
- entry AH 02h
- return AL bit codes (same as [0040:0017])
- bit 7 Insert state
- bit 6 CapsLock state
- bit 5 NumLock state
- bit 4 ScrollLock state
- bit 3 Alt key
- bit 2 Control key
- bit 1 Left shift (left caps-shift key)
- bit 0 Right shift (right caps-shift key)
- note other codes found at [0040:0018]
- bit 7 Insert shift (Ins key)
- bit 6 Caps shift (CapsLock key)
- bit 5 Num shift (NumLock key)
- bit 4 Scroll shift (ScrollLock key)
- bit 3 Hold state (Ctrl-NumLock is in effect)
-
-
- Function 03h Keyboard - Set Repeat Rate (PCjr, AT, XT/286, PS/2)
- entry AH 03h
- AL 00h reset typematic (PCjr)
- 01h increase initial delay (PCjr)
- 02h increase continuing delay (PCjr)
- 03h increase both delays (PCjr)
- 04h turn off typematic (PCjr)
- 05h set typematic rate (AT, PS/2)
- BH 00h-03h for delays of 250ms, 500ms, 750ms, or 1second
- 0,0 250ms
- 0,1 500ms
- 1,0 750ms
- 1,1 1 second
- BL 00h-1Fh for typematic rates of 30cps down to 2cps
- 00000 30 01011 10.9 10101 4.5
- 00001 26.7 01100 10 10110 4.3
- 00010 24 01101 9.2 10111 4
- 00011 21.8 01110 8.6 11000 3.7
- 00100 20 01111 8 11001 3.3
- 00101 18.5 10000 7.5 11010 3
- 00110 17.1 10001 6.7 11011 2.7
- 00111 16 10010 6 11100 2.5
- 01000 15 10011 5.5 11101 2.3
- 01001 13.3 10011 5.5 11110 2.1
- 01010 12 10100 5 11111 2
-
-
- Function 04h Keyboard Click Toggle (PCjr and Convertible)
- entry AH 04h
- AL 00h for click off
- 01h for click on
-
-
- Function 05h Keyboard Buffer Write (AT or PS/2 with enhanced kbd)
- (XT/286, PS/2, AT with "Enhanced" keyboard)
- entry AH 05h
- CH scan code
- CL ASCII character
- return AL 01h if buffer full
-
-
- Function 10h Get Enhanced Keystroke And Read (F11, F12 Enhanced Keyb'd)
- (XT/286, PS/2, AT with "Enhanced" keyboard)
- entry AH 10h
- return AH scan code
- AL ASCII character if applicable
-
-
- Function 11h Check Enhanced Keystroke (F11-F12 on enhanced keyboard)
- (XT/286, PS/2, AT with "Enhanced" keyboard)
- entry AH 11h
- return ZF 0 (clear) if key pressed
- 1 if buffer empty
- AH scan code (when ZF=0)
- AL ASCII character if applicable (when ZF=0)
- note Keystroke is not removed from buffer
-
-
- Function 12h Extended Get Shift Status (F11, F12 Enhanced keyboard)
- entry AH 12h
- return AL bit
- 0 right Shift key depressed
- 1 left Shift key depressed
- 2 Control key depressed
- 3 Alt key depressed
- 4 ScrollLock state active
- 5 NumLock state active
- 6 CapsLock state active
- 7 insert state is active
- AH 0 left Control key pressed
- 1 left Alt key depressed
- 2 right Control key pressed
- 3 right Alt key depressed
- 4 Scroll Lock key depressed
- 5 NumLock key depressed
- 6 CapsLock key depressed
- 7 SysReq key depressed
-
-
- Function F0h Set CPU speed (Compaq 386)
- entry AH F0h set speed
- return unknown
- note used by Compaq DOS MODE command.
- parameters not availible
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 17h Printer │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:005Ch) access the parallel printer(s)
- AH is changed. All other registers left alone.
-
- Function 00h Print Character/send AL to printer DX (0, 1, or 2)
- entry AH 00h
- AL character
- DX printer to be used (0,1,2)
- return AH status byte
- bit
- 0 time out
- 1 unused
- 2 unused
- 3 I/O error
- 4 selected
- 5 out of paper
- 6 acknowledge
- 7 not busy
-
-
- Function 01h Initialize Printer - set init line low, send 0Ch to printer DX
- entry AH 01h
- DX printer port to be initialized (0,1,2)
- return status as below
-
-
- Function 02h Printer Status - read status of printer DX into AH
- entry AH 02h
- DX printer port to be used (0,1,2)
- return AH bit flags bit 7 0 = printer is busy
- bit 6 ACKnowledge line state
- bit 5 out-of-paper line state
- bit 4 printer selected line state
- bit 3 I/O error
- bit 2 unused
- bit 1 unused
- bit 0 time-out error
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 18h ROM BASIC │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0060h) Execute ROM BASIC at address 0F600h:0000h
- note 1) Often reboots a compatible
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 19h Bootstrap Loader │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0064h) Reads track 0, sector 1 into address 0000h:7C00h, then transfers
- control to that address. If no diskette drive available,
- transfers to ROM-BASIC or displays loader error message.
- Causes reboot of disk system if invoked while running.
- (no memory test performed).
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Ah Time of Day │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0068h) access the PC internal clock
-
- Function 00h Read System Time Counter
- entry AH 00h
- return CX high word of clock count
- DX low word of clock count
- AL 00h if clock was read or written (via AH=0,1) within the current
- 24-hour period. Otherwise, AL > 0
-
-
- Function 01h Set Clock - set # of 55ms clock ticks in system time counter
- entry AH 01h
- CX:DX high word/low word count of timer ticks
- return none
- note 1) The clock ticks are incremented by timer interrupt at 18.2065 times
- per second or 54.9254milliseconds/count. Therefore:
- counts per second = 18 (12h)
- counts per minute = 1092 (444h)
- counts per hour = 65543 (10011h)
- counts per day = 1573040 (1800B0h)
- 2) counter is zeroed when system is rebooted
-
-
- Function 02h Read Real Time Clock Time (AT and after)
- entry AH 02h
- return CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL 1 (set) if daylight savings time option
- CF 1 (set) if clock not operating
-
-
- Function 03h Set Real Time Clock Time (AT and after)
- entry AH 03h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL 0 (clear) if standard time
- 1 (set) if daylight savings time option
- return none
-
-
- Function 04h Read Real Time Clock Date (AT and after)
- entry AH 04h
- return CH century in BCD (19 or 20)
- CL year in BCD
- DH month in BCD
- DL day in BCD
- CF 1 (set) if clock not operating
-
-
- Function 05h Set Real Time Clock Date (AT and after)
- entry AH 05h
- CH century in BCD (19 or 20)
- CL year in BCD
- DH month in BCD
- DL day in BCD
- return none
-
-
- Function 06h Set Real Time Clock Alarm (AT and after)
- entry AH 06h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- return CF set if alarm already set or clock inoperable
- note Int 4Ah occurs at specified alarm time every 24hrs until reset
-
-
- Function 07h Reset Real Time Clock Alarm (AT and after)
- entry AH 07h
- return none
-
-
- Function 08h Set Real Time Clock Activated Power On Mode (Convertible)
- entry AH 08h
- CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
-
-
- Function 09h Read Real Time Clock Alarm Time and Status
- (Convertible and PS/2 Model 30)
- entry AH 09h
- return CH hours in BCD
- CL minutes in BCD
- DH seconds in BCD
- DL alarm status:
- 00h if alarm not enabled
- 01h if alarm enabled but will not power up system
- 02h if alarm will power up system
-
-
- Function 0Ah Read System-Timer Day Counter (XT-2 [640k motherboard], PS/2)
- entry AH 0Ah
- return CF set on error
- CX count of days since Jan 1,1980
-
-
- Function 0Bh Set System-Timer Day Counter (XT-2 [640k motherboard], PS/2)
- entry AH 0Bh
- CX count of days since Jan 1,1980
- return CF set on error
-
-
- Function 80h Set Up Sound Multiplexor (PCjr) (Tandy 1000?)
- entry AH 80h
- AL 00h source is 8253 channel 2
- 01h source is cassette input
- 02h source is I/O channel "audio in"
- 03h source is TI sound generator chip
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Bh Control-Break │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:006Ch) This interrupt is called when the keyboard scanner of the IBM
- machines detects Ctrl and Break pressed at the same time.
-
- note 1) If the break occurred while processing an interrupt, one or more
- end of interrupt commands must be send to the 8259 Programmable
- Interrupt Controller.
- 2) All I/O devices should be reset in case an operation was underway at
- the time.
- 3) It is normally pointed to an IRET during system initialization so that
- it does nothing, but some programs change it to return a ctrl-C scan
- code and thus invoke int 23h.
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Ch Timer Tick │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0070h)
- note 1) Taken 18.2065 times per second
- 2) Normally vectors to dummy IRET unless PRINT.COM has been installed.
- 3) If an application moves the interrupt pointer, it is the responsibility
- of that application to save and restore all registers that may be
- modified.
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Dh Vector of Video Initialization Parameters │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0074h) This doubleword address points to 3 sets of 16-bytes containing
- data to initialize for video modes for video modes 0 & 1 (40
- column), 2 & 3 (80 column), and 4, 5 & 6 (graphics) on the
- Motorola 6845 CRT controller chip.
- 6845 registers:
- R0 horizontal total (horizontal sync in characters)
- R1 horizontal displayed (characters per line)
- R2 horizontal sync position (move display left or right)
- R3 sync width (vertical and horizontal pulse: 4-bits each)
- R4 vertical total (total character lines)
- R5 vertical adjust (adjust for 50 or 60 Hz refresh)
- R6 vertical displayed (lines of chars displayed)
- R7 vertical sync position (lines shifted up or down)
- R8 interlace (bits 4 and 5) and skew (bits 6 and 7)
- R9 max scan line addr (scan lines per character row)
- R10 cursor start (starting scan line of cursor)
- R11 cursor stop (ending scan line of cursor)
- R12 video memory start address high byte (6-bits)
- R13 video memory start address low byte (8-bits)
- R14 cursor address high byte (6-bits)
- R15 cursor address low byte (8-bits)
-
- 6845 Video Init Tables:
- table for modes 0 and 1 \
- table for modes 2 and 3 \ each table is 16 bytes long and
- table for modes 4,5, and 6 / contains values for 6845 registers
- table for mode 7 /
- 4 words: size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
- 8 bytes: number of columns in each mode
- 8 bytes: video controller mode byte for each mode
- note 1) There are 4 separate tables, and all 4 must be initialized if all
- video modes will be used.
- 2) The power-on initialization code of the computer points this vector
- to the ROM BIOS video routines.
- 3) IBM recommends that if this table needs to be modified, it should be
- copied into RAM and only the nescessary changes made.
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Eh Vector of Diskette Controller Parameters │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0078h) Dword address points to data base table that is used by BIOS.
- Default location is at 0F000:0EFC7h. 11-byte table format:
- bytes:
- 00h 4-bit step rate, 4-bit head unload time
- 01h 7-bit head load time, 1-bit DMA flag
- 02h 54.9254 ms counts - delay till motor off (37-38 typ)
- 03h sector size:
- 00h 128 bytes
- 01h 256 bytes
- 02h 512 bytes
- 03h 1024 bytes
- 04h last sector on track (8 or 9 typical)
- 05h gap between sectors on read/write (42 typical)
- 06h data length for DMA transfers (0FFh typical)
- 07h gap length between sectors for format (80 typical)
- 08h sector fill byte for format (0F6h typical)
- 09h head settle time (in milliseconds) (15 to 25 typical)
- DOS 1.0 0
- DOS 2.10 15
- DOS 3.1 1
- 10h motor start time (in 1/8 second intervals) (2 to 4 typ.)
- DOS 2.10 2
- note 1) This vector is pointed to the ROM BIOS diskette tables on system
- initialization
- 2) IBM recommends that if this table needs to be modified, it should be
- copied into RAM and only the nescessary changes made.
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 1Fh Pointer to Graphics Character Extensions (Graphics Set 2) │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:007Ch) This is the pointer to data used by the ROM video routines to
- display characters above ASCII 127 while in CGA medium and high
- res graphics modes.
-
- note 1) Doubleword address points to 1K table composed of 28 8-byte character
- definition bit-patterns. First byte of each entry is top row, last byte
- is bottom row.
- 2) The first 128 character patterns are located in system ROM.
- 3) This vector is set to 000:0 at system initialization
- 4) Used by DOS' external GRAFTABL command
-
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 20h Terminate Current Program │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0080h)
- Issue int 20h to exit from a program. This vector transfers to the logic in
- DOS to restore the terminate address, the Ctrl-Break address,and the critical
- error exit address to the values they had on entry to the program. All the file
- buffers are flushed and all handles are closed. You should close all files
- changed in length (see function calls 10h and 3Eh) before issuing this
- interrupt. If the changed file is not closed, its length, time, and date are
- not recorded correctly in the directory.
- For a program to pass a completion code or an error code when terminating, it
- must use either function call 4Ch (Terminate a Process) or 31h (Terminate
- Process and Stay Resident). These two methods are preferred over using
- int 20h and the codes returned by them can be interrogated in batch processing.
- Important: Before you issue an interrupt 20h, your program must ensure that
- the CS register contains the segment of its program segment prefix.
-
- Interrupt 20h DOS - Terminate Program
- entry no parameters
- return The following vectors are restored from the Program Segment Prefix:
- 0Ah Program Terminate
- 0Eh Control-C
- 12h Critical Error
- note IBM and Microsoft recommend using int 21 Fn 4Ch. Using int 20 is
- officially frowned upon since the introduction of DOS 2.0
-
-