
UDI IPC Methods for DOS Hosts
Universal Debugger Interface Specification
4-3
Before becoming resident, the TIP links its
TIPVecRec
structure into the UDI
chain. The UDI chain consists of a doubly linked list of
TIPVecRec
structures
anchored at a single interrupt vector between 60h and 66h.
The UDI chain is located through the following process:
Each interrupt vector from 60h to 66h is inspected in turn. If the interrupt
vector points to a location whose first four bytes contain the
TIPVecRec
signature, that is assumed to be the UDI chain anchor. If no interrupt vector
from 60h to 66h matches the
TIPVecRec
signature, (as would be true for the
first TIP) then the first vector in that 60h through 66h group that equals NULL
is selected as the UDI chain anchor.
The
exeName
field of the
TIPVecRec
points to a “TIP identifier” string which
the TIP uses to identify itself and which the DFE uses when it searches down
the UDI chain for a particular TIP. The way the TIP chooses this TIP identifier
string and the manner in which the DFE learns the TIP identifier string is
outside the scope of this specification. (In the sample AMD implementation,
the DFE actually spawns the TIP and the TIP assumes argv[1] is the identifier
string.)
When the DFE locates the UDI chain and finds a TIP with the correct TIP
identifier string, it must first call the TIP’s
UDIConnect
routine. The
parameters for the
UDIConnect
routine are discussed below. Notice that one
of the things the DFE passes to the TIP at
UDIConnect
time is a pointer to a
DFEVecRec
structure. The
DFEVecRec
structure contains call entry points
for the UDIDFE calls. The TIP uses this
DFEVecRec
structure to call back
into the DFE. The structure of this
DFEVecRec
is:
struct
DFEVecRec {
UDIDFEEvalExpression
UDIDFEEvalResource
UDIDFEGetInput
UDIDFEPutOutput
UDIDFEEndTIPIO
}
/* all FAR pointers */
General Call Interface Information
The information here applies to both DFE–to–TIP calls and to TIP–to–DFE
calls. The processor must be in real mode at the time of the call. On entry, the
called routine may not assume the contents of any registers except CS, IP, SS,
and SP. In all respects, the calling convention is that for Microsoft C compiled
large model using the compiler option—Alfu (DS != SS). Refer to Microsoft
documentation for further details on this calling convention.