[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Int 2D  - Alternate Multiplex Interrupt Specification (amis) [v3.5.1]      [t]

   AH = multiplex number
   AL = function
       00h installation check

       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 below) identifying
                   the program using the multiplex number
       01h get entry point

       Return: AL = 00h if all API calls via INT 2D
           AL = FFh if entry point supported
               DX:BX -> entry point for bypassing interrupt chain
       02h uninstall
       DX:BX = return address for successful uninstall (may be
           ignored by TSR)

       Return: AL = status
               00h not implemented
               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
               FFh successful
           return at DX:BX with AX destroyed if successful and
             TSR honors specific return address
       03h request pop-up

       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
       04h determine chained interrupts
       BL = interrupt number (except 2Dh)

       Return: AL = status
               00h not implemented
               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 below)
               FFh interrupt not hooked

       Notes:  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.
           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 thru 03h are disparaged and will be
             removed from the next version of this specification;
             they are included for compatibility with version 3.3,
             though they were probably never used in any
             implementation
       05h get hotkeys

       Return: AL = status
               00h not implemented
               FFh supported
               DX:BX -> hotkey list (see below)
       06h-0Fh reserved for future enhancements

       Return: AL = 00h (not implemented)
       other  application-dependent

Notes: programs should not use fixed multiplex numbers; rather, a program
     should scan all multiplex numbers from 00h to FFh, remembering the
     first unused multiplex in case the program is not yet installed.
     For multiplex numbers which are in use, the program should compare
     the first 16 bytes of the signature string to determine whether it
     is already installed on that multiplex number.  If not previously
     installed, it should use the first free multiplex number.
   functions other than 00h are not valid unless a program is installed
     on the selected multiplex number
   to be considered fully compliant with version 3.5 of the specification,
     programs must implement at least functions 00h, 02h (no resident
     uninstall code required), and 04h (return value 04h).  TSRs that
     provide hotkeys with which the user can activate them must also
     implement function 05h.  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
   users of this proposal should adhere to the IBM interrupt sharing
     protocol (see below), which will permit removal of TSRs in
     arbitrary order and interrupt handler reordering.  All TSRs
     following this proposal should be removable, though they need not
     keep the code for removing themselves resident; it is acceptable
     for a separate program to perform the removal.
   A sample implementation including example TSRs and utility programs
     may be found in a separate package distributed as AMISLnnn.ZIP
     (AMISL091.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.

See Also: INT 2F
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
Index: uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
Index: entry point;Alternate Multiplex Interrupt|entry point;AMIS

Format of signature string:
Offset Size    Description
 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

Format of interrupt hook list [array]:
Offset Size    Description
 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 below)

Format of hotkey list:
Offset Size    Description
 00h   BYTE    type of hotkey checking
       bit 0: checks before chaining INT 09
       bit 1: checks after chaining INT 09
       bit 2: checks before chaining INT 15/AH=4Fh
       bit 3: checks after chaining INT 15/AH=4Fh
       bit 4: checks on INT 16/AH=00h,01h,02h
       bit 5: checks on INT 16/AH=10h,11h,12h
       bit 6: checks on INT 16/AH=20h,21h,22h
       bit 7: reserved (0)
 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 below)
        03h    WORD    disallowed shift states (see below)
        05h    BYTE    flags
               bit 0: hotkey chained before processing
               bit 1: hotkey chained after processing
               bit 2: others should pass through this hotkey
                   so that it can be monitored
               bit 3: hotkey will not activate if other keys
                   pressed/released before hotkey press is
                   completed
               bit 4: this key is remapped into some other key
               bit 5-7: reserved (0)

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.
   if bit 2 is set, either control key may be pressed for the hotkey; if
     bits 8 and 10 are both set, then both control keys must be pressed.
     Similarly for bits 3 and 9/11, as well as 7 and 0/1.
   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

Bitfields for shift states:
 bit 0 right shift pressed
 bit 1 left shift pressed
 bit 2 either control key pressed
 bit 3 either Alt key pressed
 bit 4 ScrollLock active
 bit 5 NumLock active
 bit 6 CapsLock active
 bit 7 either shift key pressed
 bit 8 left control key pressed
 bit 9 left Alt key pressed
 bit 10 right control key pressed
 bit 11 right Alt key pressed
 bit 12 ScrollLock pressed
 bit 13 NumLock pressed
 bit 14 CapsLock pressed
 bit 15 SysRq key pressed

Format of interrupt sharing protocol interrupt handler entry point:
Offset Size    Description
 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)
 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)

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
 'CSJewell' 'Modula3L' Curtis Jewell's Modula-3 compiler (non-TSR)
 'ECLIPSE ' 'PLUMP   ' Eclipse Software's printer and plotter spooler
 'GraySoft' 'GIPC    ' GraySoft's Inter-Process Communications driver
 'heathh  ' 'Monitor '
 'J. Berry' 'RATSR   ' RemoteAccess Network Manager workstation module
 'JWB    ' 'RAMLIGHT'  James Birdsall's on-screen RAMdisk activity indicator
 'Nildram ' 'ST         '  Screen Thief graphics screen grabber
 'R-Ware  ' 'dLite   ' run-time data decompression TSR
 'Ralf B  ' 'FASTMOUS' example TSR included with sample AMIS library code
 'Ralf B  ' 'NOLPT n ' example TSR -- turn LPTn into bit-bucket
 'Ralf B  ' 'NOTE    ' example TSR -- popup note-taker
 'Ralf B  ' 'RBkeyswp' RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
 'Ralf B  ' 'SWITCHAR' example TSR -- add switchar() support removed from DOS5
 'Ralf B  ' 'VGABLANK' example TSR -- VGA-only screen blanker

.NG limit reached, continued in next section...

This page created by ng2html v1.05, the Norton guide to HTML conversion utility. Written by Dave Pearson