2539 lines
110 KiB
Text
2539 lines
110 KiB
Text
CHAPTER 3 THE PC ROM BIOS
|
||
|
||
Programming Technical Reference - IBM
|
||
Copyright 1988, Dave Williams
|
||
|
||
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 01h 40x25 color text CGA|PCjr| | |EGA| |
|
||
02h 80x25 B/W text CGA|PCjr| | |EGA| |
|
||
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
|
||
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 32k 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
|
||
|
||
|
||
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)
|
||
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
|
||
BL CPU page register
|
||
DX segment of graphics bitmap buffer (video modes 60h,61h; AL0Fh)
|
||
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
|
||
01h set border color palette register
|
||
02h set all palette registers and overscan
|
||
03h toggle blink/intensity bit (EGA, MCGA, VGA)
|
||
04h unknown
|
||
05h unknown
|
||
06h unknown
|
||
07h read individual palette register (VGA)
|
||
08h read overscan (order color) (VGA)
|
||
09h read all palette registers and overscan register (VGA)
|
||
10h set individual video DAC color register (MCGA, VGA)
|
||
11h unknown
|
||
12h set block of video DAC color registers (MCGA, VGA)
|
||
13h set video DAC color page (VGA)
|
||
14h unknown
|
||
15h read individual video DAC color register (MCGA, VGA)
|
||
16h unknown
|
||
17h read block of video DAC color registers (MCGA, VGA)
|
||
18h unknown
|
||
19h unknown
|
||
1Ah read video DAC color-page state (VGA)
|
||
1Bh perform gray-scale summing (VGA)
|
||
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
|
||
ES:BP pointer to user table
|
||
CX count of patterns to store
|
||
DX character offset into map 2 block
|
||
BL block to load in map 2
|
||
BH number of bytes per character pattern
|
||
AL 01h, 11h load ROM monochrome patterns (8 by 14)
|
||
BL block to load
|
||
AL 02h, 12h load ROM 8 by 8 double-dot patterns
|
||
BL block to load
|
||
AL 03h set block specifier
|
||
BL block specifier
|
||
AL 04h load 8x16 text characters (MCGA, VGA)
|
||
AL 14h set 8x16 text characters (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:
|
||
AL 20h user 8 by 8 graphics characters (INT 1FH)
|
||
ES:BP = pointer to user table
|
||
AL 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
|
||
AL 22h ROM 8 by 14 set
|
||
BL row specifier
|
||
AL 23h ROM 8 by 8 double dot
|
||
BL row specifier
|
||
AL 24h load 8x16 graphics characters (MCGA, VGA)
|
||
AL 30h return information
|
||
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
|
||
AL 00h unknown
|
||
01h unknown
|
||
02h select 400 line mode (VGA)
|
||
BL 10h return EGA information
|
||
20h select alternate print screen routine
|
||
30h select vertical resolution for text modes (VGA)
|
||
31h enable/disable default palette loading (MCGA, VGA)
|
||
32h enable/disable video addressing (MCGA, VGA)
|
||
33h enable/disable default gray scale summing (MCGA, VGA)
|
||
34h enable/diable text cursor emulation (VGA)
|
||
35h display-switch interface
|
||
return BH 00h if color mode is in effect
|
||
01h if mono mode is in effect
|
||
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
|
||
|
||
|
||
Function 13h Write String, Don't Move Cursor (AT, XT/286, PS/2)
|
||
entry AH 13h
|
||
AL 00h
|
||
BH display page number
|
||
BL attribute
|
||
CX length of string
|
||
DX starting cursor position
|
||
ES:BP pointer to start of string
|
||
return none
|
||
|
||
|
||
Function 13h Write String, Move Cursor (AT, XT/286, PS/2)
|
||
entry AH 13h
|
||
AL 01h
|
||
BH display page number
|
||
BL attribute
|
||
DX starting cursor position
|
||
CX length of string
|
||
ES:BP pointer to start of string
|
||
return none
|
||
|
||
|
||
Function 13h Write String of Alternating Characters and Attributes;
|
||
Don't Move Cursor (AT, XT/286, PS/2)
|
||
entry AH 13h
|
||
AL 02h
|
||
bit 0: set in order to move cursor after write
|
||
bit 1: set if string contains alternating chars 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
|
||
|
||
|
||
Function 13h Write String of Alternating Characters and Attributes;
|
||
Move Cursor (AT, XT/286, PS/2)
|
||
entry AH 13h
|
||
AL 03h
|
||
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,DL row,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)
|
||
|
||
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
|
||
ES:DI pointer to character font
|
||
CX number of characters to store
|
||
DX character offset into RAM font area
|
||
|
||
|
||
Function 15h Return Physical Display Parameters (Convertible)
|
||
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 (PS/2)
|
||
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 alternate display device
|
||
where:
|
||
00h no display
|
||
01h IBM monochrome display and printer adapter
|
||
02h IBM color/graphics monitor adapter
|
||
03h reserved
|
||
04h IBM EGA (color display)
|
||
05h IBM EGA (monochrome)
|
||
06h IBM PGA
|
||
07h VGA (analog monochrome display)
|
||
08h VGA (analog color display)
|
||
09h reserved
|
||
0Ah reserved
|
||
0Bh IBM PS/2 Model 30 (analog monochrome display)
|
||
0Ch IBM PS/2 Model 30 (analog color display)
|
||
BL active display device
|
||
|
||
|
||
Function 1Bh Functionality/State Information (MCGA, VGA)
|
||
entry AH 1Bh
|
||
return unknown
|
||
|
||
|
||
Function 1Ch Save/Restore Video State (VGA)
|
||
entry AH 1Ch
|
||
AL 00h return state buffer size
|
||
01h save video state
|
||
02h restore video state
|
||
return unknown
|
||
note VGA only
|
||
|
||
|
||
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 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 modes, 3D4h color modes
|
||
08h Sequencer (5 registers) 3C4h
|
||
10h Graphics Controller (9 registers) 3CEh
|
||
18h Attribute Controller (20 registers) 3C0h
|
||
Single registers
|
||
20h Miscellaneous Output register 3C2h
|
||
28h Feature Control register (3BAh mono modes, 3DAh color modes)
|
||
30h Graphics 1 Position register 3CCh
|
||
38h Graphics 2 Position register 3CAh
|
||
return BL data
|
||
|
||
|
||
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 port number
|
||
Pointer/data chips
|
||
00h CRTC (3B4h mono modes, 3D4h color modes)
|
||
08h Sequencer 3C4h
|
||
10h Graphics Controller 3CEh
|
||
18h Attribute Controller 3C0h
|
||
Single registers
|
||
20h Miscellaneous Output register 3C2h
|
||
28h Feature Control register (3BAh mono modes, 3DAh color)
|
||
30h Graphics 1 Position register 3CCh
|
||
38h Graphics 2 Position register 3CAh
|
||
byte 3 register number (0 for single registers)
|
||
byte 4 register value
|
||
|
||
|
||
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
|
||
Pointer/data chips
|
||
00h CRTC (3B4h mono modes, 3D4h color modes)
|
||
08h Sequencer 3C4h
|
||
10h Graphics Controller 3CEh
|
||
18h Attribute Controller 3C0h
|
||
Single registers
|
||
20h Miscellaneous Output register 3C2h
|
||
28h Feature Control register (3BAh mono modes, 3DAh color modes)
|
||
30h Graphics 1 Position register 3CCh
|
||
38h Graphics 2 Position register 3CAh
|
||
ES:BX address of table of one byte entries, one byte
|
||
to be written to each register
|
||
|
||
|
||
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 diskette 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)
|
||
1,1 80x25 monochrome (MDA or Hercules)
|
||
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 on system (PCjr, some Tandy 1000s)
|
||
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)
|
||
|
||
|
||
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 <20> 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 parm 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
|
||
bit 0: ignore primary defect map
|
||
bit 1: ignore secondary defect map
|
||
bit 2: update secondary defect map
|
||
bit 3: perform surface analysis
|
||
bit 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 det.
|
||
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 reg. 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
|
||
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
|
||
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
|
||
01h CRC error
|
||
02h bad tape signals
|
||
03h no data found on tape
|
||
04h no data
|
||
80h invalid command
|
||
86h no cassette present
|
||
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 AX 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
|
||
thru 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 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
|
||
01h list full
|
||
80h invalid cmd
|
||
86h unsupported
|
||
if function 00h:
|
||
BX number of error codes stored
|
||
ES:DI pointer to error log
|
||
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 = ncb)
|
||
0FCh disk reset
|
||
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 following
|
||
byte ID byte: PC FF
|
||
XT FE or FB
|
||
PCjr FD
|
||
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
|
||
04h extended BIOS area allocated at 640k
|
||
03h reserved
|
||
02h bus is Micro Channel instead of PC
|
||
01h reserved
|
||
00h reserved
|
||
word unknown (set to 0)
|
||
word unknown (set to 0)
|
||
note Int 15h is also used for the Multitask Hook on PS/2 machines. No
|
||
register settings availible yet.
|
||
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
|
||
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 1s
|
||
BL 00h-1Fh for typematic rates of 30cps down to 2cps
|
||
|
||
|
||
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 0F0h Set CPU speed (Compaq 386)
|
||
entry AH 0F0h 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
|
||
|
||
2) IBM and Microsoft recommend using int 21 Fn 4Ch. Using int 20 is
|
||
officially frowned upon since the introduction of DOS 2.0
|
||
|
||
|
||
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 is 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 is 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 PROGRAM TERMINATE
|
||
(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 none
|
||
|
||
Interrupt 20h Minix - Send/Receive Message
|
||
entry AX process ID of other process
|
||
BX pointer to message
|
||
CX 1 send
|
||
2 receive
|
||
3 send&receive
|
||
note The message contains the system call number (numbered as in V7 Unix)
|
||
and the call parameters
|
||
|
||
|