NOTE: For brevity, the value AX=2780H is not listed in the entry parameters for each function.
The value in register CX identifies the individual functions, with CL being the module number (see Table 2-1) and CH the function within a module. The first call you make must be the Installation Check (see "Installation Check" on page 2-14), to verify that the multitasker is present.
Many of the INT 2F / AX=2780H calls take parameters in other registers. Some of these use the 32-bit general purpose registers. This should cause you no difficulty so long as you direct the assembler to accept 32-bit registers and operands. Parameters that are pointers are sometimes passed as 32-bit linear addresses, not segment:offset pairs. You can convert a segment:offset pair to a linear address by calculating segment*16+offset.
|
CL Hex
|
Module
|
|---|---|
|
01
|
Supervisor (SUP)
|
|
02
|
Real Time Monitor (RTM)
|
|
03
|
Memory (MEM)
|
|
04
|
Domains (DOM)
|
|
05
|
Virtual Machines (VM)
|
Installation Check
Function
Check whether the multitasker is resident. Entry Parameters
|
Register
|
Value
|
|---|---|
|
AX
|
2780H
|
|
CX
|
1101H
|
|
Register
|
Value
|
|---|---|
|
CX
|
00H - Multitasker resident 1101H - Multitasker not resident
|
|
EBX
|
Version (if CX=0)
|
If the multitasker is present, its version number is returned in BX. The initial release is version 1.00, corresponding to the value 0100H in BX.
|
Register
|
Value
|
|---|---|
|
CX
|
2502H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 3EH - E_CritOverrun
|
>255 CritEnters
|
You can call X_CritEnter again while inside a critical region. If you do, you must call X_CritExit the same number of times you called X_CritEnter. The system maintains a count of the number of times you have entered, and only allows other processes to run when it reaches zero again.
The only error possible is that the count may overflow and generate the E_CritOverrun error.
Critical regions are similar to mutexes, but should be used only for truly time-critical operations, because they completely disable all other processes. While your process is in a critical region, it can call other system functions, but it cannot suspend or terminate itself. If it calls functions to do either of these they will not take effect until after the X_CritExit call.
See Also: X_CritExit, X_MXCreate
NOTE: The industry-standard call INT 2FH / AX=1681H is also supported by the multitasker, and is the preferred method.
|
Register
|
Value
|
|---|---|
|
CX
|
2602H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 3DH - E_CritUnderrun
|
No CritEnter
|
If you were not in a critical region when you called X_CritExit, it returns an E_CritUnderrun error.
See Also: X_CritEnter
NOTE: The industry-standard call INT 2FH / AX=1682H is also supported by the multitasker, and is the preferred method.
|
Register
|
Value
|
|---|---|
|
CX
|
1003H
|
|
DS:EDX
|
Pointer to a Descriptor Parameter Block; see "Explanation"
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
=DESC_PB_SEL
|
Selector
|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc 32H - E_NoDesc
|
Invalid DESC_PB_SINFO No free descriptors
|
|
DS:[EDX]
|
DESC_PB_SEL
|
Selector
|
The parameter block is defined in STRUCS.DEF as follows:.
|
DESC_PBLK
|
struc
|
|
|
DESC_PB_BASE
|
dd
|
?
|
|
DESC_PB_LIMIT
|
dd
|
?
|
|
DESC_PB_SEL
|
dw
|
?
|
|
DESC_PB_MINFO
|
db
|
?
|
|
DESC_PB_SINFO
|
db
|
?
|
|
DESC_PBLK
|
ends
|
|
Before you call Z_DescAlloc, you must initialize all fields in DESC_PBLK except DESC_PB_MINFO and DESC_PB_SEL, which will be filled with the selector of the allocated descriptor when the function returns successfully. If the size exceeds 1 MB, the granularity will be set to 4 KB, otherwise the segment will have byte granularity. In either case, the DESC_PB_LIMIT you supply must be the limit (size-1) in bytes.
|
Bit
|
Reset
|
Set
|
|---|---|---|
|
0
|
16-bit code or data
|
32-bit code or data
|
|
1
|
Data segment
|
Code segment
|
|
4
|
Allocate from LDT
|
Allocate from LDT
|
|
5,6
|
Privilege level
|
Privilege level
|
Note that data segments are assumed to be writable and expand-up, and code segments to be non-conforming and readable. Call Z_DescFree to deallocate the descriptor when it is no longer needed.
Z_DescFree (1103H)
Function
Release a descriptor. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
1103H
|
|
DS:EDX
|
Pointer to a Descriptor Parameter Block; see "Z_DescAlloc (1003H)" on page 2-18
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc
|
Invalid selector
|
Note that freeing a descriptor renders its selector invalid. The selector must not be loaded into a segment register while the descriptor is freed, or reloaded at a later date.
See Also: Z_DescAlloc, Z_DescGet, Z_MemDescAlloc, Z_DescSet
|
Register
|
Value
|
|---|---|
|
CX
|
1203H
|
|
DS:EDX
|
Pointer to a Descriptor Parameter Block; see "Z_DescAlloc (1003H)" on page 2-18
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc
|
Invalid selector
|
See Also: Z_DescAlloc, Z_MemDescAlloc, Z_DescSet
|
Register
|
Value
|
|---|---|
|
CX
|
1303H
|
|
DS:EDX
|
Pointer to a Descriptor Parameter Block; see "Z_DescAlloc (1003H)" on page 2-18
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Selector
|
|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc
|
Invalid selector or DESC_PB_SINFO
|
See Also: Z_DescAlloc, Z_DescGet, Z_MemDescAlloc
|
Register
|
Value
|
|---|---|
|
CX
|
1504H
|
|
DS:EDX
|
Pointer to a PCREATE_PBLK parameter block; see "X_PCreate (0E02H)" on page 2-126
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Handle
|
Child domain's handle
|
|
CX
|
Error code: 00H - No error xxH - Error codes
|
See Table A-1 on page A-1
|
Z_DomFork may fail at any stage, which requires a limited resource to be allocated. See Table A-1 on page A-1 for a full list of error codes.
See Also: Z_DomTerm, X_PCreate
Z_DomHandleGet (2B02H)
Function
Get the domain of a specified process. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
2B02H
|
|
EDX
|
Process handle
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Domain handle
|
|
|
ECX
|
Error code: 00H - No error 0BH - E_BadPHandle
|
Process handle is invalid
|
See Also: X_PCreate, X_PHandleGet, Z_PHandleListGet, Z_PNameGet, X_DomHandleGetMy
Get the current domain's handle.
|
Register
|
Value
|
|---|---|
|
CX
|
0204H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Handle
|
Handle of calling process' domain
|
|
ECX
|
Error code: 00H - No error
|
|
You can get the domain handle of another process, if you know its process handle, by calling Z_DomHandleGet.
See Also: Z_DomHandleGet
|
Register
|
Value
|
|---|---|
|
CX
|
2604H
|
|
EDX
|
Domain handle (0=current domain)
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Free memory
|
|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid domain handle
|
See Also: Z_DomMemMaxGet, Z_DomMemMaxSet, X_DomMemUsedGet
|
Register
|
Value
|
|---|---|
|
CX
|
2804H
|
|
Register
|
Value
|
|
|---|---|---|
|
EBX
|
Domain Memory Limit
|
|
|
ECX
|
Error code: 00H - No error
|
|
See Also: X_DomMemFreeGet, Z_DomMemMaxSet, X_DomMemUsedGet
|
Register
|
Value
|
|---|---|
|
CX
|
2904H
|
|
EDX
|
New value for the Domain Memory Limit
|
|
Register
|
Value
|
|
|---|---|---|
|
EBX
|
Old limit
|
|
|
ECX
|
Error code: 00H - No error
|
|
The previous value of the limit is returned in EBX.
See Also: X_DomMemFreeGet, Z_DomMemMaxGet, X_DomMemUsedGet
|
Register
|
Value
|
|---|---|
|
CX
|
0D04H
|
|
DS:EDX
|
Pointer to a BANKMEM_PBLK parameter block; see "Explanation"
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid domain handle
|
You must supply all fields in the parameter block, which is defined as follows:
|
BANKMEM_PBLK
|
struc
|
|
|
BANKM_PB_DOMAIN
|
dd
|
?
|
|
BANKM_PB_LENGTH
|
dd
|
?
|
|
BANKM_PB_SOURCE
|
dd
|
?
|
|
BANKM_PB_DEST
|
dd
|
?
|
|
BANKMEM_PBLK
|
ends
|
|
See Also: Z_DomMemWrite
|
Register
|
Value
|
|---|---|
|
CX
|
2704H
|
|
EDX
|
Domain handle (0=current domain)
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Allocated memory
|
|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid domain handle
|
See Also: X_DomMemFreeGet, Z_DomMemMaxGet, Z_DomMemMaxSet
|
Register
|
Value
|
|---|---|
|
CX
|
0E04H
|
|
DS:EDX
|
Pointer to a BANKMEM_PBLK parameter block; see "Z_DomMemRead (0D04H)" on page 2-30
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid domain handle
|
You must supply all fields in the BANKMEM_PBLK parameter block which is defined under Z_DomMemRead.
See Also: Z_DomMemRead
|
Register
|
Value
|
|---|---|
|
CX
|
1204H
|
|
EDX
|
Domain handle (0=current domain)
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Number
|
|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid handle
|
As with other functions, you can pass a null domain handle to imply "the current domain."
See Also: X_PTerm, X_PCreate, Z_PHandleListGet
|
Register
|
Value
|
|---|---|
|
CX
|
2104H
|
|
EDX
|
Domain handle (0=current domain)
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Process Handle Error code: 00H - No error 36H - E_BadDomain
|
|
|
ECX
|
Invalid handle
|
As with other functions, you can pass a null domain handle to imply "the current domain."
See Also: X_PCreate, X_DomNProcessesGet
|
Register
|
Value
|
|---|---|
|
CX
|
1304H
|
|
EDX
|
Domain handle
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid handle
|
See Also: X_PSuspend, Z_DomUnsuspend
Z_DomTerm (1604H)
Function
Terminate all processes in the specified domain. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
1604H
|
|
EDX
|
Domain handle
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid handle
|
See Also: X_PTerm
|
Register
|
Value
|
|---|---|
|
CX
|
1404H
|
|
EDX
|
Domain handle (0=current domain)
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 36H - E_BadDomain
|
Invalid handle
|
See Also: Z_DomSuspend, X_PSuspend
|
Register
|
Value
|
|---|---|
|
CX
|
1D04H
|
|
EDX
|
Interrupt being cleared (0 to 0FH)
|
|
Register
|
Value
|
|
|---|---|---|
|
ECX
|
Error code: 00H - No error
|
|
See Also: Z_HandlerHWInt
|
Register
|
Value
|
|---|---|
|
CX
|
1C02H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Flag number
|
|
|
ECX
|
Error code: 00H - No error 2DH - E_NoFlag
|
All flags allocated
|
There is a very limited number of flags available (normally 256), so use them sparingly.
When you no longer need a flag, you can free it by calling Z_FlagFree.
See Also: Z_FlagFree, X_FlagsMaxGet, Z_FlagSet, Z_FlagStatusGet, Z_FlagWait
|
Register
|
Value
|
|---|---|
|
CX
|
1D02H
|
|
EDX
|
Flag number
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Flag number
|
|
|
ECX
|
Error code: 00H - No error 04H - E_BadFlag 2EH - E_FlagBusy
|
No such flag Flag in use
|
Z_FlagFree will not free a flag that is set, or on which a process is waiting. You can call Z_FlagStatusGet to determine the flag's current status.
See Also: Z_FlagAlloc, X_FlagsMaxGet, Z_FlagSet, Z_FlagStatusGet, Z_FlagWait
|
Register
|
Value
|
|---|---|
|
CX
|
0302H
|
|
EDX
|
Flag number
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Flag number
|
|
|
ECX
|
Error code: 00H - No error 04H - E_BadFlag 05H - E_FlagOverrun
|
Invalid flag number Overrun detected
|
If the flag was already set, the overrun counter is incremented and the error code E_FlagOverrun is returned to the ISR. The same code will be returned to the process that eventually calls Z_FlagWait.
See Also: Z_FlagStatusGet, Z_FlagWait, Z_FlagWWTO
|
Register
|
Value
|
|---|---|
|
CX
|
1902H
|
|
EDX
|
Flag number
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Status: 00H - Unused 01H - Flag_Off 02H - Flag_On >2 - Process handle
|
Unallocated Unset Set Unset, process waiting
|
|
ECX
|
Error code: 00H - No error 04H - E_BadFlag
|
Flag number too big
|
See Also: Z_FlagAlloc, Z_FlagFree, X_FlagsMaxGet, Z_FlagSet, Z_FlagWait
|
Register
|
Value
|
|---|---|
|
CX
|
0202H
|
|
EDX
|
Flag number
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 04H - E_BadFlag 05H - E_FlagOverrun 06H - E_FlagUnderrun
|
Flag number too big Flag has been set twice Someone else is waiting
|
If, at the time of this call, the flag has been set two or more times, the error code E_FlagOverrun is returned. If another process is waiting on the flag, the code E_FlagUnderrun is returned.
The act of calling Z_FlagWait or Z_FlagWWTO resets the flag or decrements the overrun counter. If overrun has occurred, you must call Z_FlagWait or Z_FlagWWTO once for each Z_FlagSet there has been.
See Also: Z_FlagSet, Z_FlagWWTO
|
Register
|
Value
|
|---|---|
|
EBX
|
Timeout count in ticks
|
|
CX
|
2002H
|
|
EDX
|
Flag number
|
If, at the time of this call, the flag has been set two or more times, the error code E_FlagOverrun is returned. If another process is waiting on the flag, the code E_FlagUnderrun is returned.
See Also: Z_FlagSet, Z_FlagWait
|
Register
|
Value
|
|---|---|
|
CX
|
1E02H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Number of flags
|
|
|
ECX
|
Error code: 00H - No error
|
No error is possible
|
See Also: Z_FlagAlloc, Z_FlagFree, Z_FlagStatusGet
|
Register
|
Value
|
|---|---|
|
CX
|
0801H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
00H xxH
|
Background Foreground
|
|
ECX
|
Error code: 00H - No error
|
No error is possible
|
The user tells the task manager which task to bring to the foreground. The task manager in turn commands the VM and DOM modules to switch the selected domain into the foreground.
While running in the background, applications can read and write video memory and controllers (up to VGA resolution only), but the user will see nothing until they switch your application into the foreground.
If you wait for a keypress or mouse activity while in background, your application will be suspended until it is in the foreground again.
If, while running in the background, you urgently need to display a message to the user, you can call VM functions to do so. You cannot force your domain to the foreground, but you could ask the user to do so by pressing the appropriate task manager hot key combination.
See Also: X_ForeGet
|
Register
|
Value
|
|---|---|
|
CX
|
0B05H
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
Handle
|
Domain handle of console owner
|
|
ECX
|
Error code: 00H - No error
|
|
See Also: X_ForeCheck
|
Register
|
Value
|
|---|---|
|
CX
|
2F03H
|
|
DS:EDX
|
Pointer to a Gate Parameter Block; see "Explanation"
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
EBX
|
=GATE_PB_GATE
|
Gate selector
|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc 32H - E_NoDesc
|
Invalid parameters No free descriptors
|
|
DS:[EDX]
|
GATE_PB_GATE
|
Gate selector
|
The parameter block is defined in STRUCS.DEF as follows:
|
GATE_PBLK
|
struc
|
|
|
GATE_PB_SEL
|
dw
|
?
|
|
GATE_PB_COUNT
|
dw
|
?
|
|
GATE_PB_OFFSET
|
dd
|
?
|
|
GATE_PB_GATE
|
dw
|
?
|
|
unused
|
db
|
?
|
|
GATE_PB_SINFO
|
db
|
?
|
|
GATE_PBLK
|
ends
|
|
Before you call Z_GateAlloc, you must initialize all fields in GATE_PBLK except GATE_PB_GATE, which will be filled with the selector of the allocated gate when the function returns successfully.
|
Bit
|
Reset
|
Set
|
|---|---|---|
|
5, 6
|
Privilege level
|
Privilege level
|
Note that this function creates a call gate, not a task, interrupt or trap gate. Call Z_GateFree to deallocate the gate when it is no longer needed.
Z_GateFree (3003H)
Function
Release a call gate. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
3003H
|
|
DS:EDX
|
Pointer to a Gate Parameter Block; see "Z_GateAlloc (2F03H)" on page 2-50
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error 31H - E_BadDesc
|
Invalid selector
|
See Also: Z_GateAlloc
|
Register
|
Value
|
|---|---|
|
CX
|
0704H
|
|
DS:EDX
|
Pointer to Handler Parameter Block; see "Explanantion"
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error
|
|
|
DS:[EDX]
|
Modified
|
See "Explanation"
|
Z_HandlerHWInt
Z_HandlerHWIntDflt
Z_HandlerIOEx
Z_HandlerPageFault
Z_HandlerSWInt
Z_HandlerVHWInt
Z_HandlerVHWIntDflt
Differences between the functions are explained in the individual function descriptions.
Handlers are themselves level zero protected mode code functions. Before you install a handler, you must obtain a code descriptor and selector for its code segment.
In each case, the function to install the handler takes as a parameter a pointer to the following Handler Parameter Block:
|
HPB
|
struc
|
|
|
|
dw
|
0FFFFH
|
|
|
dw
|
0
|
|
HPB_EIP
|
dd
|
?
|
|
HPB_CS
|
dd
|
?
|
|
|
dd
|
4 dup (?)
|
|
HPB
|
ends
|
|
Before you call the function to install the handler, you must supply the HPB_EIP and HPB_CS fields, which should point to the handler itself.
Handler Interface
All handlers are called with the same stack frame, and handler-specific information in the registers. This information is detailed in the sections describing each handler installation function.
|
EXCEP
|
struc
|
|
|
EX_EDI
|
dd
|
?
|
|
EX_ESI
|
dd
|
?
|
|
EX_EBP
|
dd
|
?
|
|
EX_OPCODE
|
db
|
?,0,0,0
|
|
EX_EBX
|
dd
|
?
|
|
EX_EDX
|
dd
|
?
|
|
EX_ECX
|
dd
|
?
|
|
EX_EAX
|
dd
|
?
|
|
EX_ERROR
|
dd
|
?
|
|
EX_EIP
|
dd
|
?
|
|
EX_CS
|
dw
|
?
|
|
EX_OSINFO
|
dw
|
?
|
|
EX_EFLAGS
|
dd
|
?
|
|
EX_ESP
|
dd
|
?
|
|
EX_SS
|
dw
|
?,?
|
|
EX_ES
|
dw
|
?,?
|
|
EX_DS
|
dw
|
?,?
|
|
EX_FS
|
dw
|
?,?
|
|
EX_GS
|
dw
|
?,?
|
|
EXCEP
|
ends
|
|
EX_OSINFO contains the 386 exception number in its low byte, and flags in its high byte.
|
Bit
|
Use if set:
|
|---|---|
|
0-7
|
386 exception number
|
|
8
|
Processor exception
|
|
9
|
Hardware interrupt
|
|
10
|
Software interrupt
|
The system disables interrupts before calling the handler and restores the previous interrupt state after the handler returns.
General Exception Handler Entry Parameters
General exception handlers are passed the following information in registers:
|
Register
|
Value
|
|---|---|
|
DS:EBX
|
Pointer to Handler Parameter Block
|
|
DL
|
Exception number
|
Return from the Handler
Handlers must return to the address on the stack by executing a
32-bit RETF. If the handler's code segment is 16-bit, it can execute a 32-bit RETF by placing an operand override byte (66H) in front of the RETF instruction. General Exception Handler Exit Codes
General exception handlers must return the following in register AX if they have handled the exception (CF clear):
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
AX
|
0 0FFFEH 0FFFFH
|
Success: return to user Suspend user Terminate user
|
The default General Exception handler reflects exceptions 0 to 5 and 7 to real mode, and terminates the user process for other exceptions.
Z_HandlerHWInt (0804H)
Function
Install a level 0 hardware interrupt handler. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
0804H
|
|
DS:EDX
|
Pointer to Handler Parameter Block; see "Z_HandlerGenEx (0704H)" on page 2-53
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error
|
|
|
DS:[EDX]
|
Modified
|
As for Z_HandlerGenEx
|
Most details are the same as for Z_HandlerGenEx (see page 2-53) except for the following details of the handler's entry and exit conditions.
|
Register
|
Value
|
|---|---|
|
DS:EBX
|
Pointer to Handler Parameter Block
|
|
DL
|
Interrupt number (must be preserved)
|
|
DH
|
EX_OSINFO (Must be preserved)
|
If a level 0 hardware interrupt handler needs to signal End of Interrupt (EOI) by clearing the PIC's In-Service bit, it must inform the system of this by calling Z_EndOfInterrupt.
Z_HandlerHWIntDflt (1804H)
Function
Install a substitute for the default level 0 hardware interrupt handler. Entry Parameters
|
Register
|
Value
|
|---|---|
|
ECX
|
1804H
|
|
DS:[EDX]
|
Pointer to Handler Parameter Block; see "Z_HandlerGenEx (0704H)" on page 2-53
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
CX
|
Error code: 00H - No error
|
|
|
[EDX]
|
Modified
|
As for Z_HandlerGenEx
|
Details are the same as for Z_HandlerHWInt (see page 2-59), except that the last level 0 hardware interrupt handler must not pass the interrupt on; it must clear CF to return to the system.
See Also: Z_EndOfInterrupt, Z_HandlerGenEx, Z_HandlerHWInt, Z_HandlerUnlink
Z_HandlerIOEx (0604H)
Function
Install an I/O exception handler. Entry Parameters
|
Register
|
Value
|
|---|---|
|
CX
|
0604H
|
|
DS:EDX
|
Pointer to Handler Parameter Block; see "Z_HandlerGenEx (0704H)" on page 2-53
|
|
Register
|
Value
|
Meaning
|
|---|---|---|
|
ECX
|
Error code: 00H - No error
|
|
|
DS:[EDX]
|
Modified
|
As for Z_HandlerGenEx
|