|
| |
Interrupt 2Fh Multiplex Interrupt
Interrupt 2Fh is the multiplex interrupt. A general interface is
defined between two processes. It is up to the specific
application using interrupt 2Fh to define specific functions and
parameters.
Every multiplex interrupt handler is assigned a specific
multiplex number. The multiplex number is specified in the AH
register; the AH value tells which program your request is
directed toward. The specific function that the handler is to
perform is placed in the AL register. Other parameters are places
in the other registers as needed. The handlers are chained into
the 2Fh interrupt vector and the multiplex number is checked to
see if any other application is using the same multiplex number.
There is no predefined method for assigning a multiplex number to
a handler. You must just pick one. To avoid a conflict if two
applications choose the same multiplex number, the multiplex
numbers used by an application should be patchable. In order to
check for a previous installation of the current application, you
can search memory for a unique string included in your program.
If the value you wanted in AH is taken but you don't find the
string, then another application has grabbed that location.
Int 2Fh was not documented under DOS 2.x. There is no reason not
to use int 2Fh as the multiplex interrupt in DOS 2.x. The only
problem is that DOS does not initialize the int 2Fh vector, so
when you try to chain to it like you are supposed to, it will
crash. But if your program checks the vector for being zero and
doesn't chain in that case, it will work for you in 2.x just the
same as 3.x.
Int 2Fh doesn't require any support from DOS itself for it to be
used in application programs. It's not handled by DOS, but by the
programs themselves. The only support DOS has to provide is to
initialize the vector to an IRET. DOS 3.2 does itself contain
some int 2Fh handlers - it uses values of 08h, 13h, and 0F8h.
Notes:
1) The multiplex numbers AH=0h through AH=7Fh are reserved for
DOS. Applications should use multiplex numbers 80h through
0FFh.
2) When in the chain for int 2Fh, if your code calls DOS or if
you execute with interrupts enabled, your code must be
reentrant/recursive. |