Int 2D - Alternate Multiplex Interrupt Specification (amis) [v3.6] [t]

AH = multiplex number
AL = function
00h installation check
01h get private entry point
02h uninstall
03h request popup
04h determine chained interrupts
05h get hotkey list
06h get device-driver information
07h-0Fh reserved for future enhancements

Return: AL = 00h (not implemented)
other application-dependent
other registers vary by function (also see individual entries below)

Return: varies by function

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.6 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. 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 #2256), 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.

See Also: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h

See Also: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"

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

See Also: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#3708