📄 interrup.k
字号:
implement function 05h. TSRs which provide DOS device drivers must
also implement function 06h. The absolute minimum fully-compliant
implementation has an overhead of 64 bytes (80 bytes with function
05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
protocol header and hook list entry).
the signature string and description may be used by memory mappers
to display the installed programs
to be considered fully compliant, users of this specification must
adhere to the IBM interrupt sharing protocol (see #02568), which will
permit removal of TSRs in arbitrary order and interrupt handler
reordering. All TSRs following this specification should be
removable unless they are loaded from CONFIG.SYS, though they need
not keep the code for removing themselves resident; it is acceptable
for a separate program to perform the interrupt unhooking and
memory-freeing steps of removal.
A sample public-domain implementation including example TSRs and
utility programs may be found in a separate package distributed as
AMISLnnn.ZIP (AMISL092.ZIP as of this writing).
Please let me know if you choose to follow this proposal. The
signature and a list of the private API calls you use would be
appreciated, as well.
SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
SeeAlso: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"
Format of interrupt sharing protocol interrupt handler entry point:
Offset Size Description (Table 02568)
00h 2 BYTEs short jump to actual start of interrupt handler, immediately
following this data block (EBh 10h)
02h DWORD address of next handler in chain
06h WORD signature 424Bh
08h BYTE EOI flag
00h software interrupt or secondary hardware interrupt handler
80h primary hardware interrupt handler (will issue EOI to
interrupt controller)
09h 2 BYTEs short jump to hardware reset routine
must point at a valid FAR procedure (may be just RETF)
0Bh 7 BYTEs reserved (0) by IBM for future expansion
Note: when chaining to the prior handler, the interrupt handler must perform
an indirect jump/call using the address at offset 02h in the
ISP header. This permits another AMIS TSR to hook itself into
the chain at a position other than as the first handler to receive
an interrupt.
SeeAlso: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#04068
--------t-2D--00-----------------------------
INT 2D - AMIS v3.0+ - INSTALLATION CHECK
AL = 00h
AH = multiplex number for program
Return: AL = 00h if free
AL = FFh if multiplex number in use
CX = binary version number (CH = major, CL = minor)
DX:DI -> signature string (see #02569) identifying the program
using the multiplex number
SeeAlso: INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
SeeAlso: INT 2D/AL=06h
Index: installation check;Alternate Multiplex Interrupt Specification
Index: installation check;AMIS|installation check;FASTMOUS
Index: installation check;SPELLER|installation check;Monitor
Index: installation check;NOLPT|installation check;NOTE
Index: installation check;RBkeyswp|installation check;SWITCHAR
Index: installation check;VGABLANK|installation check;EATMEM
Index: installation check;RECALL|installation check;XPTR2
Format of AMIS signature string:
Offset Size Description (Table 02569)
00h 8 BYTEs blank-padded manufacturer's name (possibly abbreviated)
08h 8 BYTEs blank-padded product name
10h 64 BYTEs ASCIZ product description (optional, may be a single 00h)
Note: it is not necessary to reserve a full 64 bytes for the description,
just enough to store the actual ASCIZ string
SeeAlso: #02570
(Table 02570)
Values for AMIS signatures known to be in use:
'Byrial J' 'EKLAVO ' permits keyboard entry of Esperanto accented letters
'CoveSoft' 'Burnout+' shareware screen saver Burnout Plus
'Crynwr ' 'SPELLER ' TSR spelling-checker
'CPH1995 ' 'CDTSR ' resident CD-Audio player
'CPH1996 ' 'DSAPI '
'CSJewell' 'Modula3L' Curtis Jewell's Modula-3 compiler (non-TSR)
'Cubbi...' 'ASCII...' Example ASCII code view/enter TSR by Sergey Zubkov
'Cubbi...' 'ScrnGrab' Example screen grabber by Sergey Zubkov
'DAISYCHA' 'INDRIVER' Advanced Parallel Port daisy chain driver (vendor name
in product description field, if desired)
(see also INT 2D/AL=DCh)
'DTown SD' 'DTU ' DTown Software Development's DTown Utilities
(see also INT 2D/AL=20h)
'ECLIPSE ' 'PLUMP ' Eclipse Software's printer and plotter spooler
'GraySoft' 'GIPC ' GraySoft's Inter-Process Communications driver
'heathh ' 'Monitor '
'Helge O ' TSRs by Helge Olav Helgesen
'IVALM SK' 'lmkey ' Russian keyboard driver by Sergey Khabarov
'IVALM SK' 'lmrus ' Russian screen driver by Sergey Khabarov
'J. Berry' 'RATSR ' RemoteAccess Network Manager workstation module
'JWB ' 'RAMLIGHT' James Birdsall's on-screen RAMdisk activity indicator
'M Better' 'iHPFS ' Marcus Better's HPFS filesystem driver for DOS
'M. Paul ' 'FREEVER ' DOS version-faking TSR by Matthias Paul
'Nildram ' 'ST ' Screen Thief graphics screen grabber
'NoBrain ' 'FlatReal' Flat real mode monitor by Sergei Shtylyov
'NoBrain ' 'Grabber ' Frame grabber drivers by Sergei Shtylyov
'NoBrain ' 'SqrModes' TSR providing some non-standard video modes
by Sergei Shtylyov
'Pino Nav' 'ALTMENU ' activate any program's menu bar by pressing Alt key
'Pino Nav' 'Keybit ' Pino Navato's KEYBIT Lite Italian keyboard driver v4+
'PowrQuot' 'CAPRILOG'
'PowrQuot' 'CAPRITSR'
'PowrQuot' 'CAPRIWIN'
'R-Ware ' 'dLite ' run-time data decompression TSR
'Ralf B ' 'disaXXYY' RBdisabl -- disable key scancode XX w/ shift states YY
'Ralf B ' 'DUALVGA ' dual-VGA support, screen blanker, and DPMS driver
'Ralf B ' 'FASTMOUS' example TSR included with sample AMIS library code
'Ralf B ' 'NoBreak ' disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
'Ralf B ' 'NOLPT n ' example TSR -- turn LPTn into bit-bucket
'Ralf B ' 'NOTE ' example TSR -- popup note-taker
'Ralf B ' 'RBclock ' RBclock -- on-screen real-time clock
'Ralf B ' 'RBclockE' RBclock -- on-screen elapsed-time clock
'Ralf B ' 'RBdvorak' Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
'Ralf B ' 'RBkcount' display count of keystrokes on screen
'Ralf B ' 'RBkeyswp' RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
'Ralf B ' 'RBnoboot' disable Ctrl-Alt-Del key combination
'Ralf B ' 'ShftCaps' require Shift-CapsLock to turn on CapsLock
'Ralf B ' 'ShftNumL' require Shift-NumLock to turn off NumLock
'Ralf B ' 'SWITCHAR' example TSR -- add switchar() support removed from DOS5
'Ralf B ' 'VGABLANK' VGA-only screen blanker
'Ralf B ' 'WINTAME ' yield CPU when program in Win95 DOS box is idle
'Sally IS' 'Mdisk ' removeable, resizeable RAMdisk
'Sally IS' 'Scr2Tex ' screen dumper with output in (La)Tex format
'SRT ' 'STOPBOOT' reboot preventer by Steve Talbot
'Thaco ' 'NEST ' Eirik Pedersen's programmer's delimiter matcher
'TifaWARE' 'EATMEM ' George A. Theall's public domain memory restrictor for
testing programs (v1.1+)
'TifaWARE' 'RECALL ' public domain commandline editor and history (v1.2+)
'Todd ' 'XPTR2 ' PC-to-Transputer interface by Todd Radel
'WlkngOwl' 'NoiseSYS' NOISE.SYS random-number generator
SeeAlso: #02569
--------t-2D--01-----------------------------
INT 2D - AMIS v3.0+ - GET PRIVATE ENTRY POINT
AL = 01h
AH = multiplex number for program
Return: AL = 00h if all API calls via INT 2D
AL = FFh if entry point supported
DX:BX -> entry point for bypassing interrupt chain
Note: this function is not valid unless a program is installed on the
specified multiplex number; use INT 2D/AL=00h to check
SeeAlso: INT 2D/AL=00h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
SeeAlso: INT 2D/AL=06h
Index: entry point;Alternate Multiplex Interrupt|entry point;AMIS
--------t-2D--02-----------------------------
INT 2D - AMIS v3.0+ - UNINSTALL
AL = 02h
AH = multiplex number for program
DX:BX = return address for successful uninstall (may be ignored by TSR)
Return: AL = status
00h not implemented (makes TSR non-compliant with specification)
01h unsuccessful
02h can not uninstall yet, will do so when able
03h safe to remove, but no resident uninstaller
(TSR still enabled)
BX = segment of memory block with resident code
04h safe to remove, but no resident uninstaller
(TSR now disabled)
BX = segment of memory block with resident code
05h not safe to remove now, try again later
06h disabled, but can not be removed from memory
because loaded from CONFIG.SYS
07h safe to remove, but no resident device-driver
uninstaller. Caller must unlink device
drivers from DOS device chain as well as
unhooking interrupts and freeing memory
BX = segment of memory block with resident code
FFh successful
return at DX:BX with AX destroyed if successful and TSR honors
specific return address
Note: this function is not valid unless a program is installed on the
specified multiplex number; use INT 2D/AL=00h to check
SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
SeeAlso: INT 2D/AL=06h
Index: uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
--------t-2D--03-----------------------------
INT 2D - AMIS v3.0+ - REQUEST POP-UP
AL = 03h
AH = multiplex number for program
Return: AL = status
00h not implemented or TSR is not a pop-up
01h can not pop up at this time, try again later
02h can not pop up yet, will do so when able
03h already popped up
04h unable to pop up, user intervention required
BX = standard reason code
0000h unknown failure
0001h interrupt chain passes through memory
which must be swapped out to pop up
0002h swap-in failed
CX = application's reason code if nonzero
FFh TSR popped up and was exited by user
BX = return value
0000h no return value
0001h TSR unloaded
0002h-00FFh reserved
0100h-FFFFh application-dependent
Note: this function is not valid unless a program is installed on the
specified multiplex number; use INT 2D/AL=00h to check
SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=04h,INT 2D/AL=05h
SeeAlso: INT 2D/AL=06h
--------t-2D--04-----------------------------
INT 2D - AMIS v3.0+ - DETERMINE CHAINED INTERRUPTS
AL = 04h
AH = multiplex number for program
BL = interrupt number (except 2Dh)
Return: AL = status
00h not implemented (makes TSR non-compliant with specification)
01h (obsolete) unable to determine
02h (obsolete) interrupt hooked
03h (obsolete) interrupt hooked, address returned
DX:BX -> TSR's interrupt BL handler
04h list of hooked interrupts returned
DX:BX -> interrupt hook list (see #02571)
FFh interrupt not hooked
Notes: BL is ignored if the TSR returns AL=04h; in that case, the caller
needs to scan the return list rather than making additional calls
to this function. If the return is not 00h or 04h, then the caller
must cycle through the remaining interrupt numbers it wishes to
check.
return values 01h through 03h may not be used by AMIS v3.6-compliant
programs; they are included here solely for compatibility with
version 3.3, though they were probably never used in any
implementation
for return values 01h through 03h, since INT 2D is known to be hooked,
the resident code need not test for BL=2Dh (to minimize its size),
and the return value is therefore undefined in that case.
this function is not valid unless a program is installed on the
specified multiplex number; use INT 2D/AL=00h to check
SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=05h
SeeAlso: INT 2D/AL=06h
Format of AMIS interrupt hook list [array]:
Offset Size Description (Table 02571)
00h BYTE interrupt number (last entry in array is 2Dh)
01h WORD offset within hook list's segment of the interrupt handler
this will point at the initial short jump of the interrupt
sharing protocol header (see #02568)
SeeAlso: #02572
--------t-2D--05-----------------------------
INT 2D - AMIS v3.5+ - GET HOTKEYS
AL = 05h
AH = multiplex number for program
Return: AL = status
00h not implemented
FFh supported
DX:BX -> hotkey list (see #02572)
Notes: this function is not valid unless a program is installed on the
specified multiplex number; use INT 2D/AL=00h to check
programs which provide hotkeys are required to provide this function
to be fully compliant with this specification
SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
SeeAlso: INT 2D/AL=06h
Format of AMIS hotkey list:
Offset Size Description (Table 02572)
00h BYTE type of hotkey checking (see #02573)
01h BYTE number of hotkeys (may be zero if TSR can disable hotkeys)
02h 6N BYTEs array of hotkey definitions
(one per hotkey, first should be primary hotkey)
Offset Size Description
00h BYTE hotkey scan code (00h/80h if shift states only)
hotkey triggers on release if bit 7 set
01h WORD required shift states (see #02574)
03h WORD disallowed shift states (see #02574)
05h BYTE hotkey flags (see #02575)
Notes: except for bit 7, the shift states correspond exactly to the return
values from INT 16/AH=12h. A set bit in the required states word
indicates that the corresponding shift state must be active when the
hotkey's scan code is received for the hotkey to be recognized; a
clear bit means that the corresponding state may be ignored. A set
bit in the disallowed shift states word indicates that the
corresponding shift state must be inactive.
for the disallowed-states word, if one of the "either" bits is set,
then both the corresponding left bit and right bit must be set
examples:
Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
Alt-key tap (DESQview): B8h 0000h 0007h 08h
Shf-Shf-N (NOTE.COM): 31h 0003h 000Ch 00h
Index: hotkeys;AMIS
SeeAlso: #00006
Bitfields for type of AMIS hotkey checking:
Bit(s) Description (Table 02573)
0 checks before chaining INT 09
1 checks after chaining INT 09
2 checks before chaining INT 15/AH=4Fh
3 checks after chaining INT 15/AH=4Fh
4 checks on INT 16/AH=00h,01h,02h
5 checks on INT 16/AH=10h,11h,12h
6 checks on INT 16/AH=20h,21h,22h
7 reserved (0)
SeeAlso: #02572
Bitfields for AMIS shift states:
Bit(s) Description (Table 02574)
0 right shift pressed
1 left shift pressed
2 either control key pressed
3 either Alt key pressed
4 ScrollLock active
5 NumLock active
6 CapsLock active
7 either shift key pressed
8 left control key pressed
9 left Alt key pressed
10 right control key pressed
11 right Alt key pressed
12 ScrollLock pressed
13 NumLock pressed
14 CapsLock pressed
15 SysReq key pressed
Notes: if bit 2 is set, either control key may be pressed for the hotkey; if
bits 8 and 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -