INT 2fH 4a12H: Get MRCI Installed State and Entry Address
Compatibility: 6.0+
Expects: AX 4a12H (mux number)
CX 4d52H ('MR' see notes)
DX 4349H ('CI')
──────────────────────────────────────────────────────────────────
Returns: CX 4943h ('IC', if successful)
DX 524dh ('RM')
ES:DI address of an MRCInfoRec describing the MRCI server
──────────────────────────────────────────────────────────────────
Info: Use this to learn if a MRCI server is present and available via
the INT 2fH interrupt. If successful, it returns the address of
a data structure that describes the capabilities of the MRCI
server and supplies the entry address used for accessing its API.
CX and...
DX are used in a weird but respectable technique to detect the
presence of a MRCI-compliant server.
Use CX=4d52H and DX=4349H to check for Microsoft's MRCI driver
(or one that is simulating it). And on return, if CX=4943H and
DX=524dH, then the server is present.
The algorithm is generic: the CX and DX values are shuffled
around in a well-defined manner--they are processed by the
following code fragment:
xchg ch,cl
xchg dh,dl
xchg cx,dx
A non-Microsoft MRCI server may take special action when it
receives different input values, but it will shuffle them around
as shown. The Microsoft server requires CX and DX as shown.
ES:DI If the returned values of CX and DX are as expected, ES:DI will
point to an 18-byte MRCInfoRec structure.
Notes: ■ MRCI allows for the possibility of a hardware-based compression
handler (for instance, one installed via ROM-Scan). In that
case, it installs itself as an INT 1aH handler.
If the INT 2FH service fails to return results, you should try
INT 1aH b001H to see if a hardware/ROM-based server has been
installed.
Before installing a MRCI server, you should check the INT 1aH
version of this fn. If a hardware assisted MRCI server is
installed, it is probably faster than your software-only
version. If you do install a MRCI server, you should intercept
both vectors. Only one MRCI server (the last one installed)
can be active.
■ Before using INT 2FH or INT 1aH, you should check their
interrupt vectors to make sure that they are not 0000:0000.
See Also: MRCI API
INT 1aH b001H (check for ROM-based MRCI server)
DoubleSpace Overview
DoubleSpace API
INT 2fH: Multiplex Interrupt
DOS Functions
-♦-