Category: memory management
Flags: Undocumented function
INT 2F - 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