📄 interrup.l
字号:
Return: CX = status (0002h) (see #02739)
02h "Z_ModuleReg" register an OS module
EBX = module number (0005h-000Fh)
DS:EDX -> module descriptor (see #02741)
Return: CX = status (0000h,0030h) (see #02739)
03h allocate SYSDAT memory
DX = number of ??? to allocate
Return: CX = status (0000h,0003h) (see #02739)
04h get selector to SYSDAT
Return: CX = 0000h (successful)
BX = selector for EMM386 data segment
EBX high word cleared
05h "Z_MoveReal" relocate segment into extended memory
DS:EDX -> descriptor parameter block
Return: ECX = status (00h,03h,31h,32h) (see #02739)
---if successful---
parameter block filled
06h "Z_Reboot" return to real mode via triple fault
07h debugger break
Note: calls INT 03, then INT 21/AH=02h to output a question
mark
08h "X_ForeCheck" check if domain is in foreground
Return: CX = 0000h (successful)
EBX = ??? (0 or 2)
09h register VxD with system
0Ah unload VxD hook
0Bh indicate end of initialization phase
Return: CX = status (0002h) (see #02739)
0Ch "F_AllocWindow" allocate 4K mapping window
0Dh "F_RegisterBoot" register reboot addresses
EBX = ???
EDX = ???
Return: ???
0Eh "F_EnquireBoot" check if reboot active
Return: CX = 0000h (successful)
BL = ??? \ or BX = 0000h
BH = ??? /
0Fh get debugging level
Return: CX = 0000h (successful)
EBX = new value for debugging level
10h set debugging level
EDX = ???
Return: CX = 0000h (successful)
EBX = old value of debugging level
11h installation check (documented)
Return: CX = status
0000h if multitasker is installed
EBX = version (0100h for v1.00)
1101h if multitasker is not present
12h "F_V86BPInstall" install V86 breakpoint
DX = ???
Return: CX = 0000h (successful)
AX = old value of ???
13h "F_V86BPRemove" remove V86 breakpoint
Return: CX = status (0000h,003Fh) (see #02739)
AX = ???
14h "F_V86BPOffer" indicate INT 03 to be used as V86 breakpoint
EDX = linear address ??? of INT 03 instruction for breakpoint
Return: CX = status (0000h,003Fh) (see #02739)
15h "F_LoaderCleanup" offer opportunity to clean up
BX = segment of ???
Return: CX = 0000h (successful)
BX = segment of ???
16h "F_RegisterVxDWindow" register VxD mapping window
17h "F_RegisterPNW" register Personal NetWare information
EBX = subfunction (0-2)
Return: CX = status (0002h if EBX>2) (see #02739)
???
18h unused
Return: CX = status (0002h) (see #02739)
Return: CX = status (most subfunctions)
(E)AX and/or (E)BX contain return values, depending on function
Notes: called by DPMS.EXE and EMM386.EXE
this API is only available if AX=12FFh/BX=0EDCh returns successfully;
because the request is handled on the initial trap to the memory
manager caused by INT instructions, this API must be invoked with
an actual INT 2F instruction instead of some simulation such as a
far call to the address in the interrupt vector table
SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
(Table 02739)
Values for Novell DOS 7 EMM386 function status:
0000h successful
0001h not implemented
0002h invalid subfunction
0003h unable to find memory
0004h invalid flag (semaphore) number
0005h flag (semaphore) overrun
0006h flag (semaphore) underrun
0007h no queue handles available
0009h no queue buffers available
000Ah queue is in use
000Bh invalid process handle
000Ch no process handles available
000Dh queue access not permitted
000Eh queue is empty
000Fh queue is full
0012h no memory handles available
0014h can't find process in process list
001Bh invalid memory handle
0023h unable to terminate process
002Ah flag set ignored
002Dh no more system flags
002Eh flag (semaphore) not in idle state
002Fh flag (semaphore) wait timed out
0030h bad module number in CL
0031h bad descriptor
invalid value for DESC_PB_SINFO in a descriptor parameter block
0032h no free descriptors
0033h error while locking/unlocking a page
0034h error getting or setting a page
0035h no pages available
0036h invalid domain
0037h process already frozen
0038h process not frozen
0039h fork failure (no registered swaplist)
003Ah page already free
003Bh page already allocated
003Ch unable to switch tasks
003Dh attempted to free critical section which is not active
003Eh too many active critical sections
003Fh ???
41FFh current domain is invalid, or no domain in context
42FFh domain ID is not a valid descriptor
43FFh domain creation still in progress
44FFh domain currently being deleted
45FFh task manager is busy, cannot unload it
46FFh task manager already loaded
47FFh task manager not yet loaded
48FFh cannot save/restore because prior switch not complete
49FFh console already has owner
4BFFh unsupported opcode
4CFFh 32-bit address prefix not supported
4FFFh timeout, but not on timer queue
50FFh unable to lock timer queue
53FFh unable to switch while in Global Message Mode
54FFh error while setting Global Message Mode
55FFh not in Global Message Mode
56FFh system already in Domain Message Mode
57FFh not in Domain Message Mode
58FFh unable to allocate timeout structure
59FFh unsupported video type
5AFFh function not handled by any VM
5BFFh error in Serial..Set call
5CFFh error in Parallel..Set call
5DFFh domain list overflowed
5FFFh unable to free domain while in nobuffers mode
Format of Novell DOS/OpenDOS EMM386 descriptor parameter block:
Offset Size Description (Table 02740)
00h DWORD "DESC_PB_BASE"
04h DWORD "DESC_PB_LIMIT"
08h WORD "DESC_PB_SEL"
0Ah BYTE "DESC_PB_MINFO"
0Bh BYTE "DESC_PB_SINFO"
SeeAlso: #02741
Format of Novell DOS/OpenDOS EMM386 module descriptor:
Offset Size Description (Table 02741)
00h 12 BYTEs descriptor parameter block (see #02740)
0Ch DWORD -> module entry point
Note: for function "Z_ModuleReg", only DESC_PB_SEL and the module entry point
need to be initialized before calling EMM386
SeeAlso: #02740
--------m-2F2780CL02-------------------------
INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - REAL-TIME MONITOR
AX = 2780h
CL = 02h (module: Real-Time Monitor)
CH = subfunction
00h ???
???
Return: CX = status (0000h,0023h, others???) (see #02739)
BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
Note: calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
func 02h/sf 0Bh, and func 04h/sf 01h
01h "Z_PCountGet" get and clear count of dispatches
DX = ??? handle or 0000h for default
Return: CX = status (0000h,000Bh) (see #02739)
EBX = old value of ??? if successful
EDX destroyed
02h "Z_FlagWait" wait on semaphore
DX = index of semaphore???
Return: CX = status (0000h,0004h,0005h) (see #02739)
EBX = 0000FFFFh on error, 00000000h if successful
03h "Z_FlagSet" set a semaphore flag
DX = index of semaphore???
Return: CX = status (0000h,0004h,0006h) (see #02739)
BX = FFFFh on error, 0000h if successful
04h "X_QCreate" create a new queue
Return: CX = status (0000h,0007h,000Ah) (see #02739)
05h "X_QOpen" open queue for reading/writing
EDX -> ??? data (first 8 bytes seem to be name)
Return: CX = status (0000h,0009h,000Dh) (see #02739)
06h "X_QDelete" delete a queue
Note: calls fn 02h/subfn 05h, then fn 02h/subfn 40h
07h "X_QRead" read message from queue
EDX = ???
Return: CX = status (0000h,0009h,000Eh) (see #02739)
08h "X_QReadC" read message from queue, if any
EDX = ???
Return: CX = status (0000h,0009h,000Eh) (see #02739)
09h "X_QWrite" write message to queue
EDX = ???
Return: CX = status (0000h,0009h,000Fh) (see #02739)
0Ah "X_QWriteC" write message to queue, if space available
EDX = ???
Return: CX = status (0000h,0009h,000Fh) (see #02739)
0Bh "X_PDelay" put process to sleep for specified period
DX = number of clock ticks to sleep???
Return: CX = 0000h (successful)
0Ch "X_PDispatch" force a dispatch (run scheduler)
Return: CX = 0000h (successful)
0Dh "F_PTerm" terminate process???
Return: CX = status (0000h,0023h) (see #02739)
BX = FFFFh on error, 0000h if successful
Note: calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
0Eh "X_PCreate" create new process
???
Return: CX = status (0000h,000Ch) (see #02739)
EBX = ??? if successful
0Fh "Z_PPriorSet" set process priority
BX = ???
DX = ??? handle or 0000h for default
Return: CX = status (0000h,000Bh) (see #02739)
10h "X_PHandleGet" get current process handle
Return: CX = 0000h (successful)
BX = handle of default ???
EBX high word cleared
11h "X_PTerm" terminate process
DX = process handle or 0000h for current
BX = ??? (handle???)
Return: CX = status (0000h,000Bh,0014h) (see #02739)
12h "F_Sleep" ???
BX = ???
DX = ???
Return: CX = 0000h (successful)
13h "F_Wakeup" ???
DX = ???
Return: CX = status (see #02739)
14h "F_FindPDName" find process by name???
BX = ???
DX = ???
Return: CX = status (0000h,0014h) (see #02739)
BX = FFFFh on error, ??? if successful
15h "F_SetFlags" set ??? flags
BX = ??? (low two bits only)
DX = ??? handle or 0000h for default
Return: CX = status (0000h,000Bh) (see #02739)
BX = new value of ??? flags (entire word)
EBX high register cleared
16h "F_EndOfInterrupt" issue EOI to PIC
Return: CX = 0000h (successful)
17h "X_PTermOff" disable process termination
18h "X_PTermOK" enable process termination
19h "Z_FlagStatusGet" get semahprore's status
1Ah "F_QRdMX" ???
1Bh "F_QWrMX" ???
1Ch "Z_FlagAlloc" allocate a new semaphore
1Dh "Z_FlagFree" free semaphore
1Eh "X_FlagsMaxGet" get number of semaphores supported
1Fh "X_QReadNDC" non-destructive read from queue (peek)
20h "Z_FlagWWTO" wait on semaphore, with timeout
21h "F_UdaAlloc" ???
22h "F_UdaFree" ???
23h "X_PSuspend" suspend process
24h "X_PUnsuspend" restart process after suspension
25h "X_CritEnter" enter critical region
26h "X_CritExit" leave critical region
27h "F_PCreate" ???
28h "Z_PHandleListGet" get list of process handles
29h "Z_PNameGet" get process name
2Ah "Z_PStatusGet" get process status
2Bh "F_PDToDomain" get process' domain???
2Ch "Z_PPriorGet" get process priority
2Dh "F_QDList" get list of queues???
2Eh "Z_QNameGet" get queue's name
2Fh "X_QMsgLenGet" get message length of queue
30h "X_QMsgMaxGet" get message capacity of queue
31h "Z_QWriterGet" get handle of process waiting to write queue
32h "Z_QReaderGet" get handle of process waiting to read queue
33h "X_QMsgNumGet" get number of messages in queue
34h "Z_QFlagsGet" get queue's flags
35h "F_NameToQD" get queue by name???
36h "F_NameToPD" get process by name???
37h "X_MXCreate" create a mutex
38h "X_MXDelete" delete a mutex
39h "X_MXEnter" enter mutual-exclusion zone
3Ah "X_MXEnterC" enter mutual-exclusion zone if it is free
3Bh "X_MXExit" leave mutual-exclusion zone
3Ch "Z_TicksSet" set length of foreground time slices
3Dh "X_TickGet" get clock tick period
3Eh "F_ProcessID" ???
3Fh "X_QClose" close a queue
40h "F_QDispose" delete queue???
41h "F_PDToFlags" get process flags???
42h "F_PDToDParam" ???
43h "F_ReleaseMX" release mutex???
44h "F_SimulateInt" ???
45h "Z_QFlagsSet" set queue's flags
46h "F_TickRate" ???
47h ???
Return: CX = status (most subfunctions)
(E)AX and/or (E)BX contain return values, depending on function
Notes: called by DPMS.EXE and EMM386.EXE
this API is only available if AX=12FFh/BX=0EDCh returns successfully;
because the request is handled on the initial trap to the memory
manager caused by INT instructions, this API must be invoked with
an actual INT 2F instruction instead of some simulation such as a
far call to the address in the interrupt vector table
SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
--------m-2F2780CL03-------------------------
INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - MEMORY
AX = 2780h
CL = 03h (module: Memory)
CH = subfunction
00h ???
01h "F_PdirGet" ???
02h "F_PdirSet" ???
03h "Z_PageAlloc" allocate a given page of memory
04h "F_PageAllocG" allocate global page???
05h "F_PageAllocI" allocate instance page???
06h "F_PtblRead" get page table???
07h "F_PtrlWrite" select page table???
08h "Z_PtblGet" read page table
09h "Z_PtblSet" change page table
0Ah "Z_PagesAlloc" allocate pages of memory
0Bh "Z_PageFree" free a given page of memory
0Ch "Z_MemAlloc" allocate a memory block
0Dh "Z_MemFree" release memory block
0Eh "Z_MemSizeGet" get size of memory block
0Fh "Z_MemResize" resize a memory block
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -