📄 supported_interrupts.html
字号:
<!doctype HTML public "-//W3O//DTD W3 HTML 3.0//EN"><HTML><HEAD><TITLE>Interrupts currently supported by emulator</TITLE><META name="description" content="Interrupts currently supported by emulator"><META name="keywords" content="supported, interrupts"><META name="robots" content="nofollow"></HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#007099" alink="#FF0000"><FONT FACE="Verdana" SIZE=3><TABLE WIDTH=80%><TR><TD><FONT SIZE=+1><B>Interrupts currently supported by emulator</B></FONT><HR><BR>Quick reference:<BR><BR><FONT FACE="Fixedsys"><TABLE WIDTH=100%><TR><TD><A HREF="#int10h_00h">INT 10h/00h</A><BR><A HREF="#int10h_01h">INT 10h/01h</A><BR><A HREF="#int10h_02h">INT 10h/02h</A><BR><A HREF="#int10h_03h">INT 10h/03h</A><BR><A HREF="#int10h_05h">INT 10h/05h</A><BR><A HREF="#int10h_06h">INT 10h/06h</A><BR><A HREF="#int10h_07h">INT 10h/07h</A><BR></TD><TD><A HREF="#int10h_08h">INT 10h/08h</A><BR><A HREF="#int10h_09h">INT 10h/09h</A><BR><A HREF="#int10h_0Ah">INT 10h/0Ah</A><BR><A HREF="#int10h_0Eh">INT 10h/0Eh</A><BR><A HREF="#int10h_13h">INT 10h/13h</A><BR><A HREF="#int10h_1003h">INT 10h/1003h</A><BR><A HREF="#int11h">INT 11h</A><BR></TD><TD><A HREF="#int12h">INT 12h</A><BR><A HREF="#int13h_00h">INT 13h/00h</A><BR><A HREF="#int13h_02h">INT 13h/02h</A><BR><A HREF="#int13h_03h">INT 13h/03h</A><BR><A HREF="#int15h_86h">INT 15h/86h</A><BR><A HREF="#int16h_00h">INT 16h/00h</A><BR><A HREF="#int16h_01h">INT 16h/01h</A><BR></TD><TD><A HREF="#int19h">INT 19h</A><BR><A HREF="#int1Ah_00h">INT 1Ah/00h</A><BR><A HREF="#int21h">INT 21h</A><BR></TD></TR></TABLE></FONT><BR><BR><HR><BR>A list of supported interrupts with descriptions:<BR><BR><A NAME="int10h_00h"> </A><HR> <B>INT 10h</B> / <B>AH = 00h</B> - set video mode.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = desired video mode.<BR> <BR> These video modes are supported:<BR><BR> <B>00h</B> - Text mode 40x25, 16 colors, 8 pages.<BR><BR> <B>03h</B> - Text mode 80x25, 16 colors, 8 pages. </BLOCKQUOTE><A NAME="int10h_01h"> </A><HR> <B>INT 10h</B> / <B>AH = 01h</B> - set text-mode cursor shape.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>CH</B> = cursor start line (bits 0-4) and options (bits 5-7).<BR> <B>CL</B> = bottom cursor line (bits 0-4).<BR> <BR> When bits 6-5 of CH are set to <B>00</B>, the cursor is visible, to hide a cursor set these bits to <B>01</B> (this CH value will hide a cursor: 28h - 0<U>01</U>01000b). Bit 7 should always be zero. </BLOCKQUOTE><A NAME="int10h_02h"> </A><HR> <B>INT 10h</B> / <B>AH = 02h</B> - set cursor position.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>DH</B> = row.<BR> <B>DL</B> = column.<BR> <B>BH</B> = page number (0..7).<BR> </BLOCKQUOTE><A NAME="int10h_03h"> </A><HR> <B>INT 10h</B> / <B>AH = 03h</B> - get cursor position and size.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>BH</B> = page number.<BR> <I>return:</I><BR> <B>DH</B> = row.<BR> <B>DL</B> = column.<BR> <B>CH</B> = cursor start line.<BR> <B>CL</B> = cursor bottom line.<BR> </BLOCKQUOTE><A NAME="int10h_05h"> </A><HR> <B>INT 10h</B> / <B>AH = 05h</B> - select active video page.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = new page number (0..7).<BR> the activated page is displayed. </BLOCKQUOTE><A NAME="int10h_06h"> </A><A NAME="int10h_07h"> </A><HR> <B>INT 10h</B> / <B>AH = 06h</B> - scroll up window.<BR> <B>INT 10h</B> / <B>AH = 07h</B> - scroll down window.<BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = number of lines by which to scroll (00h = clear entire window).<BR> <B>BH</B> = <A HREF="#attrib">attribute</A> used to write blank lines at bottom of window.<BR> <B>CH, CL</B> = row, column of window's upper left corner.<BR> <B>DH, DL</B> = row, column of window's lower right corner.<BR> </BLOCKQUOTE><A NAME="int10h_08h"> </A><HR> <B>INT 10h</B> / <B>AH = 08h</B> - read character and <A HREF="#attrib">attribute</A> at cursor position.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>BH</B> = page number.<BR> <I>return:</I><BR> <B>AH</B> = <A HREF="#attrib">attribute</A>.<BR> <B>AL</B> = character.<BR> </BLOCKQUOTE><A NAME="int10h_09h"> </A><HR> <B>INT 10h</B> / <B>AH = 09h</B> - write character and <A HREF="#attrib">attribute</A> at cursor position.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = character to display.<BR> <B>BH</B> = page number.<BR> <B>BL</B> = <A HREF="#attrib">attribute</A>.<BR> <B>CX</B> = number of times to write character.<BR> </BLOCKQUOTE><A NAME="int10h_0Ah"> </A><HR> <B>INT 10h</B> / <B>AH = 0Ah</B> - write character only at cursor position.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = character to display.<BR> <B>BH</B> = page number.<BR> <B>CX</B> = number of times to write character.<BR> </BLOCKQUOTE><A NAME="int10h_0Eh"> </A><HR> <B>INT 10h</B> / <B>AH = 0Eh</B> - teletype output.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = character to write. </BLOCKQUOTE> This functions displays a character on the screen, advancing the cursor and scrolling the screen as necessary. The printing is always done to current active page. <BR><BR><A NAME="int10h_13h"> </A><HR> <B>INT 10h</B> / <B>AH = 13h</B> - write string.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>AL</B> = write mode:<BR> <B>bit 0</B>: update cursor after writing;<BR> <B>bit 1</B>: string contains <A HREF="#attrib">attributes</A>.<BR> <B>BH</B> = page number.<BR> <B>BL</B> = <A HREF="#attrib">attribute</A> if string contains only characters (bit 1 of AL is zero).<BR> <B>CX</B> = number of characters in string (attributes are not counted).<BR> <B>DL,DH</B> = column, row at which to start writing.<BR> <B>ES:BP</B> points to string to be printed. </BLOCKQUOTE> <BR><A NAME="int10h_1003h"> </A><HR> <B>INT 10h</B> / <B>AX = 1003h</B> - toggle intensity/blinking.<BR><BR> <BLOCKQUOTE> <I>input:</I><BR> <B>BL</B> = write mode:<BR> <B>0</B>: enable intensive colors.<BR> <B>1</B>: enable blinking (not supported by emulator!).<BR> <B>BH</B> = 0 (to avoid problems on some adapters).<BR> </BLOCKQUOTE> <BR><HR><A NAME="attrib"> </A><BR><B>Bit color table:</B><BR>Character attribute is 8 bit value, low 4 bits set foreground color, high 4 bitsset background color. Background blinking not supported.<BR><PRE><FONT FACE="Fixedsys">HEX BIN COLOR0 0000 black1 0001 blue2 0010 green3 0011 cyan4 0100 red5 0101 magenta6 0110 brown7 0111 light gray8 1000 dark gray9 1001 light blueA 1010 light greenB 1011 light cyanC 1100 light redD 1101 light magentaE 1110 yellowF 1111 white</FONT></PRE><A NAME="int11h"> </A> <HR> <BR> <B>INT 11h</B> - get BIOS equipment list.<BR> <BLOCKQUOTE> <I>return:</I><BR> <B>AX</B> = BIOS equipment list word, actually this call returns the contents of the word at 0040h:0010h.<BR><BR> Currently this function can be used to determine the number of installed number of floppy disk drives. <PRE><FONT FACE="Fixedsys">Bit fields for BIOS-detected installed hardware:Bit(s) Description 15-14 number of parallel devices. 13 not supported. 12 game port installed. 11-9 number of serial devices. 8 reserved. 7-6 number of floppy disk drives (minus 1): 00 single floppy disk; 01 two floppy disks; 10 three floppy disks; 11 four floppy disks. 5-4 initial video mode: 00 EGA,VGA,PGA, or other with on-board video BIOS; 01 40x25 CGA color; 10 80x25 CGA color (emulator default); 11 80x25 mono text. 3 not supported. 2 not supported. 1 math coprocessor installed. 0 set when booted from floppy (always set by emulator).</FONT></PRE> </BLOCKQUOTE><A NAME="int12h"> </A> <HR> <BR> <B>INT 12h</B> - get memory size.<BR> <BLOCKQUOTE> <I>return:</I><BR> <B>AX</B> = kilobytes of contiguous memory starting at absolute address 00000h, this call returns the contents of the word at 0040h:0013h. </BLOCKQUOTE> <HR> <BR> <B>Floppy drives are emulated using</B> <I>FLOPPY_0(..3)</I> <B>files.</B> <BR><BR><A NAME="int13h_00h"> </A> <HR> <BR> <B>INT 13h</B> / <B>AH = 00h</B> - reset disk system, (currently this call doesn't do anything). <BR><BR><A NAME="int13h_02h"> </A><A NAME="int13h_03h"> </A> <HR> <BR> <B>INT 13h</B> / <B>AH = 02h</B> - read disk sectors into memory.<BR> <B>INT 13h</B> / <B>AH = 03h</B> - write disk sectors.<BR> <BLOCKQUOTE> <I>input:</I><BR> <BLOCKQUOTE> <B>AL</B> = number of sectors to read/write (must be nonzero)<BR> <B>CH</B> = cylinder number (0..79).<BR> <B>CL</B> = sector number (1..18).<BR> <B>DH</B> = head number (0..1).<BR> <B>DL</B> = drive number (0..3 , depends on quantity of FLOPPY_? files).<BR> <B>ES:BX</B> points to data buffer.<BR> </BLOCKQUOTE> <I>return:</I><BR> <BLOCKQUOTE> <B>CF</B> set on error.<BR> <B>CF</B> clear if successful.<BR> <B>AH</B> = status (0 - if successful).<BR> <B>AL</B> = number of sectors transferred. <BR> </BLOCKQUOTE> Note: each sector has <B>512</B> bytes. </BLOCKQUOTE><A NAME="int15h_86h"> </A> <HR> <BR> <B>INT 15h</B> / <B>AH = 86h</B> - BIOS wait function. <BLOCKQUOTE> <I>input:</I><BR> <BLOCKQUOTE> <B>CX:DX</B> = interval in microseconds </BLOCKQUOTE> <I>return:</I><BR> <BLOCKQUOTE> <B>CF</B> clear if successful (wait interval elapsed),<BR> <B>CF</B> set on error or when wait function is already in progress. </BLOCKQUOTE> <BR> <I>Note:</I> <BLOCKQUOTE> the resolution of the wait period is 977 microseconds on many systems, Emu8086 uses 1000 microseconds period. </BLOCKQUOTE> </BLOCKQUOTE> <BR><A NAME="int16h_00h"> </A> <HR> <BR> <B>INT 16h</B> / <B>AH = 00h</B> - get keystroke from keyboard (no echo).<BR> <BLOCKQUOTE> <I>return:</I><BR> <BLOCKQUOTE> <B>AH</B> = BIOS scan code.<BR> <B>AL</B> = ASCII character.<BR> (if a keystroke is present, it is removed from the keyboard buffer). </BLOCKQUOTE> </BLOCKQUOTE><A NAME="int16h_01h"> </A> <HR> <BR> <B>INT 16h</B> / <B>AH = 01h</B> - check for keystroke in keyboard buffer.<BR> <BLOCKQUOTE> <I>return:</I><BR> <BLOCKQUOTE> <B>ZF = 1</B> if keystroke is not available.<BR> <B>ZF = 0</B> if keystroke available.<BR> <B>AH</B> = BIOS scan code.<BR> <B>AL</B> = ASCII character.<BR> (if a keystroke is present, it is not removed from the keyboard buffer). </BLOCKQUOTE> </BLOCKQUOTE><A NAME="int19h"> </A> <HR> <BR> <B>INT 19h</B> - system reboot.<BR> <BLOCKQUOTE> Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A: to 0000h:7C00h. Emulator just stops the execution, to boot from floppy drive select from the menu: <B>'Virtual Drive' -> 'Boot from Floppy'</B> </BLOCKQUOTE><A NAME="int1Ah_00h"> </A> <HR> <BR> <B>INT 1Ah</B> / <B>AH = 00h</B> - get system time.<BR> <BLOCKQUOTE> <I>return:</I><BR> <BLOCKQUOTE> <B>CX:DX</B> = number of clock ticks since midnight.<BR> <B>AL</B> = midnight counter, advanced each time midnight passes.<BR> </BLOCKQUOTE> </BLOCKQUOTE> Notes:<BR> There are approximately <B>18.20648</B> clock ticks per second,<BR> and <B>1800B0h</B> per 24 hours. <BR><B>AL</B> is not set by emulator yet!<A NAME="int21h"> </A> <HR> <BR><BR> <B>MS-DOS can not be loaded completely in emulator yet, so I made an emulation for some basic DOS interrupts also:<BR><BR></B> <B>INT 20h</B> - exit to operating system.<BR><BR> <B>INT 21h</B> / <B>AH=09h</B> - output of a string at DS:DX.<BR><BR> <B>INT 21h</B> / <B>AH=0Ah</B> - input of a string to DS:DX, fist byte is buffer size, second byte is number of chars actually read.<BR><BR> <B>INT 21h</B> / <B>AH=4Ch</B> - exit to operating system.<BR><BR> <B>INT 21h</B> / <B>AH=01h</B> - read character from standard input, with echo, result is stored in AL.<BR><BR> <B>INT 21h</B> / <B>AH=02h</B> - write character to standard output, DL = character to write, after execution AL = DL.<BR><BR> <BR><HR><BR><!-- <FONT SIZE=2> Development process never stops,<BR> so check my <A HREF="http://www.emu8086.com/update.html"><B>homepage</B></A> from time to time for an update. </FONT>--><BR><BR></TD></TR></TABLE><BR></FONT></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -