INT 2D - [proposed (v3.3)] - ALTERNATE MULTIPLEX INTERRUPT AH = multiplex number AL = function 00h installation check Return: AL = FFh if multiplex number in use CX = version number (CH = major, CL = minor) DX:DI -> signature string (see below) identifying the program using the multiplex number AL = 00h if free 01h get entry point Return: AL = FFh if entry point supported DX:BX -> entry point for bypassing interrupt chain AL = 00h if all API calls via INT 2D 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 FFh successful return at DX:BX with AL 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 whether chained on interrupt BL = interrupt number (except 2Dh) Return: AL = status 00h not implemented 01h unable to determine 02h interrupt hooked 03h interrupt hooked, address returned DX:BX -> TSR's interrupt BL handler FFh interrupt not hooked Note: 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 05h-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 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. the interrupt number is tentative and may need to be changed before this proposal is finalized Please let me know if you choose to follow this proposal. A list of the private API calls you use would be appreciated, as well. SeeAlso: INT 2F 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 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 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: 'TifaWARE' 'RECALL ' George A. Theall's public domain commandline editor and history TSR (v1.2+) 'EATMEM ' restrict available memory for testing programs (v1.1+) 'heathh ' 'Monitor '