📄 interrup.m
字号:
Interrupt List, part 13 of 18
Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999 Ralf Brown
--------V-2FAD00-----------------------------
INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
AX = AD00h
Return: AL = FFh if installed
BX = ??? (0100h for MS-DOS 3.3+)
Note: DOS 5+ DISPLAY.SYS chains to previous handler if AL is not one of the
subfunctions listed here
SeeAlso: AX=AD01h"DISPLAY",AX=AD02h"DISPLAY"
--------O-2FAD00-----------------------------
INT 2F U - DR DOS 3.41-5.0, Novell DOS 7 KEYB - INSTALLATION CHECK
AX = AD00h
Return: AX = FFFFh if installed
flags destroyed
Note: the Novell DOS 7 KEYB driver only checks AL to determine whether it
is already installed
SeeAlso: AX=AD80h"Novell"
--------V-2FAD01-----------------------------
INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
AX = AD01h
BX = new code page (see #01757 at INT 21/AX=6602h)
Return: CF clear if successful
AX = 0001h
CF set on error (unsupported code page)
AX = 0000h
SeeAlso: AX=AD02h"DISPLAY"
--------O-2FAD01-----------------------------
INT 2F U - DR DOS 3.41,5.0 KEYB - GET CONFIGURATION
AX = AD01h
Return: BX = current code page (see #01757 at INT 21/AX=6602h)
CX = current keyboard layout (0100h = US, 0102h = foreign)
ES = resident code segment
SeeAlso: AX=AD01h"Novell",AX=AD00h"KEYB",AX=AD02h"KEYB",AX=AD83h"KEYB"
--------O-2FAD01-----------------------------
INT 2F U - Novell DOS 7 KEYB - GET/SET??? CONFIGURATION
AX = AD01h
CX = ??? (0000h)
Return: AX = FFFFh if Novell DOS 7 KEYB installed
BX = current code page (see #01757 at INT 21/AX=6602h)
CX = current keyboard layout (0100h = US, 0102h = foreign)
ES = resident code segment
SeeAlso: AX=AD01h"DR DOS",AX=AD00h"KEYB",AX=AD02h"KEYB",AX=AD83h"KEYB"
--------V-2FAD02-----------------------------
INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
AX = AD02h
Return: CF set if code page never set
AX = 0001h
BX = FFFFh (assume first hardware code page)
CF clear if successful
BX = current code page (see #01757 at INT 21/AX=6602h)
SeeAlso: AX=AD01h"DISPLAY",AX=AD03h
--------O-2FAD02-----------------------------
INT 2F U - Novell DOS 7 KEYB - ???
AX = AD02h
DX = ??? (0000h)
Return: AX = FFFFh if installed
flags destroyed
SeeAlso: AX=AD01h"KEYB"
--------V-2FAD03-----------------------------
INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
AX = AD03h
ES:DI -> buffer for code page information (see #02971)
CX = size of buffer in bytes
Return: CF set if buffer too small
CF clear if successful
ES:DI buffer filled
SeeAlso: AX=AD01h,AX=AD02h
Format of DOS 5.0-6.0 DISPLAY.SYS code page information:
Offset Size Description (Table 02971)
00h WORD number of software code pages
02h WORD ??? (0003h)
04h WORD number of hardware code pages
06h N WORDs hardware code page numbers (see #01757 at INT 21/AX=6602h)
N WORDs software (prepared) code pages (FFFFh if not yet prepared)
--------V-2FAD04-----------------------------
INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
AX = AD04h
???
Return: ???
--------V-2FAD10-----------------------------
INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
AX = AD10h
???
Return: AX = FFFFh
BX = ??? (0100h in PC-DOS 4.01)
--------V-2FAD10-----------------------------
INT 2F U - DOS 5+ DISPLAY.SYS internal - ???
AX = AD10h
???
Return: CF clear if successful
CF set on error
Note: this function is a NOP if the active code page has never been set
(AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
--------V-2FAD40-----------------------------
INT 2F - DOS 4.0+ - ???
AX = AD40h
DX = ???
???
Return: ???
Note: called by PC-DOS 4.01 PRINT.COM
--------K-2FAD80-----------------------------
INT 2F u - MS-DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
AX = AD80h
Return: AL = FFh if installed
BX = version number (BH = major, BL = minor)
ES:DI -> internal data (see #02972)
AH destroyed (set to FFh by some implementations/versions)
Notes: MS-DOS 3.30, PC-DOS 4.01, MS-DOS 5.00, and MS-DOS 6.22 all report
version 1.00.
this function was undocumented prior to the release of DOS 5.0
most versions of KEYB completely replace the BIOS INT 09 handler, but
Novell DOS's KEYB partially uses the BIOS code and thus continues
to chain to the original INT 09 at times
some utilities check for AX=FFFFh on return
SeeAlso: AX=AD80h"Novell",AX=AD81h,AX=AD82h,AX=AD83h
Format of KEYB internal data:
Offset Size Description (Table 02972)
00h DWORD original INT 09
04h DWORD original INT 2F
08h DWORD unused (0) original INT 16 in older KEYB versions???
0Ch WORD flags A (see #02973)
0Eh WORD flags B (see #02974)
10h BYTE flags??? (bit1 used)
11h BYTE ???
12h 4 BYTEs ???
16h 2 BYTEs country ID letters, default is "US"
18h WORD current code page (see #01757 at INT 21/AX=6602h)
---DOS 3.3---
1Ah WORD pointer to first item in list of code page tables???
1Ch WORD pointer to ??? item in list of code page tables
1Eh 2 BYTEs unused???
20h WORD pointer to key translation data (see #02976)
22h WORD pointer to last item in code page table list (see #02975)
24h 9 BYTEs ???
---DOS 4.01---
1Ah 2 BYTEs ???
1Ch WORD pointer to first item in list of code page tables???
1Eh WORD pointer to ??? item in list of code page tables
20h 2 BYTEs unused???
22h WORD pointer to key translation data (see #02976)
24h WORD pointer to last item in code page table list (see #02975)
26h 9 BYTEs ???
---DOS 6.22--- (checked out with 6.22, but might be earlier)
1Ah 2 BYTEs ???
1Ch WORD pointer to current (first???) item in list of code page tables
(corresponding to codepage indicated at offset 18h)
(initial value is FFFFh)
1Eh WORD pointer to (entry to) list of code page tables (see #02975)
If not FFFFh, INT 2F/AX=AD81h scans this list of code page
tables until the requested code page was found in list or
end of table was reached (FFFFh). If found, offsets 18h and
1Ch will be changed to requested new code page. If not found,
it returns with AX=0001h 'code page not supported').
20h WORD unused??? (initial value: FFFFh)
22h WORD pointer to key translation data (see #02455)
24h WORD pointer to last item in code page table list (see #02454)
26h WORD CAPSLock/ShiftLock management flags??? (0)
Note: It appears that none of the bits is ever set inside
KEYBs code!
The following is guesswork:
bit15: =1: With country specific keyboard mapping (<Ctrl>+
<Alt>+<F2>) active, <CapsLock> works as CAPSLock
instead of ShiftLock??? Pressing a key in first row
resets CapsLock???
(Effective only on PC Convertible or with Enhanced
keyboard).
bit14-10: unused (0)
bit 9: =1: With country specific keyboard mapping active:
some kind of temporary (table) shift???
bit 8-0: unused (0)
28h BYTE unused (0)
29h BYTE make code xx for <Ctrl>+<Alt>+<xx> to set keyboard mapping
to US-layout (default is 3Bh=<F1>???)
(see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
2Ah BYTE make code yy for <Ctrl>+<Alt>+<yy> to set keyboard mapping
to country specific layout (default is 3Ch=<F2>???),
(see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
2Bh 16 BYTEs unused (0) ???
Note: at least in MS-DOS v6.22, the signature "SHARED DATA" immediately
precedes this structure
Bitfields for MS-DOS v6.22 KEYB flags A:
Bit(s) Description (Table 02973)
15 unused??? (0)
14 set on machine with BIOS machine type FBh or FEh/FFh without enh kbd
13 not FAh: ???
12 set on start of machine detection, cleared on machine types F9h, FBh,
FEh, FFh
11 not FAh: ???
(on ATs: override bit12 NOT to set NumLock on)
10 set on machine type F9h
9 unused??? (0)
8 unused??? (0)
7 used by INT 09, but never set!
=1: after keyboard self test resulting AAh, INT 09 handler will (re)set
keyboard code-set 1 and temporarily disable a PS/2 mouseport.
6 used by INT09, but never set!
=1: after keyboard self test resulting AAh, INT 09 handler will (re)set
keyboard code-set 1 and temporarily disable a PS/2 mouseport.
5 set for JP, KO, PR, TA layouts during installation???
=1: some special codepage (>932???) management???
4-0 unused??? (0)
SeeAlso: #02974,MEM F000h:FFFEh,INT 15/AH=C0h
Bitfields for MS-DOS v6.22 KEYB flags B:
Bit(s) Description (Table 02974)
15 INT 16/AH=1xh supported (INT 16h/AH=92h call returns AH<=80h)
if clear, extended keyboard scan codes are immediately discarded
14 INT 16/AH=2xh supported (INT 16h/AH=A2h call returns AH<=80h)
13 unused (0)
12 network installed (INT 2F/AX=B800h)
11 original IBM PC (BIOS date 1981)
10 PC or PC/XT (BIOS machine type byte of FBh or FEh)
9 PC Convertible (BIOS machine type byte of F9h); use INT 15/AX=4104h
8 unused (0)
7 IBM PS/2 model 30 (BIOS machine type byte of FAh)
6 IBM AT (BIOS machine type FCh)
5 IBM PS/2 (BIOS machine type F8h)
4 PS/2 and unknown only: non-standard 8042 reported by INT 15/AH=C0h
=1: after keyboard self test resulting AAh, INT 09 handler will (re)set
keyboard code-set 1 and temporarily disable a PS/2 mouseport.
3 temporary flag???
2-0 ???
SeeAlso: #02972,#02973
Format of code page table list entries:
Offset Size Description (Table 02975)
00h WORD pointer to next item, FFFFh = last
02h WORD code page (see #01757 at INT 21/AX=6602h)
04h 2 BYTEs ???
Format of KEYB translation data:
Offset Size Description (Table 02976)
00h WORD size of data in bytes, including this word
02h N-2 BYTEs ???
--------K-2FAD80-----------------------------
INT 2F u - Novell DOS 7 KEYB.COM - INSTALLATION CHECK
AX = AD80h
Return: AX = FFFFh if installed
CX = Novell DOS KEYB version number (CL = major, CH = minor)
DX = current keyboard codepage
ES:DI -> internal data and tables (ES=FFFEh if KEYB in HMA)
flags destroyed
Notes: versions: v2.08 (original ship 4/94), v2.09 (Update 10, 11/18/94),
v2.10 (Update 12, 2/22/95), v2.11 (Update 13, 5/8/95),
v2.12 (Update 14, 7/31/95)
although the installation check is via this INT 2F call, Novell DOS 7's
KEYB has no known INT 2F entry point! Presumably, the handler is
either coded in the kernel or reached via a FAR JMP from the kernel
SeeAlso: AX=AD80h"MS-DOS"
--------K-2FAD81-----------------------------
INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
AX = AD81h
BX = code page (see #01757 at INT 21/AX=6601h)
Return: CF set on error
AX = 0001h (code page not available)
CF clear if successful
Notes: called by DISPLAY.SYS
this function was undocumented prior to the release of DOS 5.0
SeeAlso: AX=AD80h,AX=AD82h
--------K-2FAD82-----------------------------
INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
AX = AD82h
BL = new state
00h US keyboard (Control-Alt-F1)
FFh foreign keyboard (Control-Alt-F2)
Return: CF set on error (BL not 00h or FFh)
CF clear if successful
Note: this function was undocumented prior to the release of DOS 5.0
SeeAlso: AX=AD80h,AX=AD81h,AX=AD83h
--------K-2FAD83-----------------------------
INT 2F - DOS 5+ KEYB.COM - GET KEYBOARD MAPPING
AX = AD83h
Return: BL = current state
00h US keyboard
FFh foreign keyboard
SeeAlso: AX=AD82h
--------l-2FAE00-----------------------------
INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
AX = AE00h
DX = magic value FFFFh
CH = FFh
CL = length of command line tail (4DOS v4.0)
DS:BX -> command line buffer (see #02977)
DS:SI -> command name buffer (see #02978)
DI = 0000h (4DOS v4.0)
Return: AL = FFh if this command is a TSR extension to COMMAND.COM
AL = 00h if the command should be executed as usual
Notes: This call provides a mechanism for TSRs to install permanent
extensions to the command repertoire of COMMAND.COM. It appears
that COMMAND.COM makes this call before executing the current
command line, and does not execute it itself if the return is FFh.
APPEND hooks this call, to allow subsequent APPEND commands to
execute without re-running APPEND
SeeAlso: AX=AE01h
Format of COMMAND.COM command line buffer:
Offset Size Description (Table 02977)
00h BYTE max length of command line, as in INT 21/AH=0Ah
01h BYTE count of bytes to follow, excluding terminating 0Dh
N BYTEs command line text, terminated by 0Dh
Format of command name buffer:
Offset Size Description (Table 02978)
00h BYTE length of command name
01h N BYTEs uppercased command name (blank-padded to 11 chars by 4DOS v4)
--------l-2FAE01-----------------------------
INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
AX = AE01h
DX = magic value FFFFh
CH = 00h
CL = length of command name (4DOS v4.0)
DS:BX -> command line buffer (see #02977)
DS:SI -> command name buffer (see #02978)
Return: DS:SI buffer updated
if length byte is nonzero, the following bytes contain the uppercase
internal command to execute and the command line buffer contains the
command's parameters (the first DS:[SI] bytes are ignored)
Notes: this call requests execution of the command which a previous call to
AX=AE00h indicated was resident
APPEND hooks this call
BUG: Novell DOS 7.0's COMMAND.COM (prior to Update 12) will attempt to run
a disk program with the indicated name even if the returned length
byte is zero, because the register used to flag this case is
clobbered without first checking it. The workaround is to set the
command name buffer to "REM" followed by enough blanks to pad out
the original command's length, which will also work with MS-DOS 6.
(from padgett@tccslr.dnet.mmc.com)
SeeAlso: AX=AE00h
--------O-2FAF00-----------------------------
INT 2F - WinDOS v2.11 - INSTALLATION CHECK
AX = AF00h
Return: AL = FFh if installed
Program: WinDOS is a DOS clone (claimed to be mostly MS-DOS 5.0 API compatible)
written by Heiko Goemann
SeeAlso: AX=AF01h"WinDOS",INT 21/AH=30h
----------2FAF00-----------------------------
INT 2F U - ???
AX = AF00h
???
Return: AX = 0000h if interface supported
SeeAlso: AX=AF02h,AX=AF03h,AX=AF04h,AX=AF13h,AX=AF30h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -