PDDREF:Device Helper (DevHlp) Services: Difference between revisions
No edit summary |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 50: | Line 50: | ||
!DevHlp Service||Code||Description | !DevHlp Service||Code||Description | ||
|- | |- | ||
|[[ | |[[DevHlp_SchedClock|SchedClock]]||0||Get system clock routine | ||
|- | |- | ||
|[[DevHelp_DevDone|DevDone]]||1||Complete Device I/O | |[[DevHelp_DevDone|DevDone]]||1||Complete Device I/O | ||
Line 241: | Line 241: | ||
!DevHlp Service||Code||Kernel||Interrupt||INIT | !DevHlp Service||Code||Kernel||Interrupt||INIT | ||
|- | |- | ||
|ABIOSCall||36||X||X||X | |[[DevHelp_ABIOSCall|ABIOSCall]]||36||X||X||X | ||
|- | |- | ||
|ABIOSCommonEntry||37||X||X||X | |[[DevHelp_ABIOSCommonEntry|ABIOSCommonEntry]]||37||X||X||X | ||
|- | |- | ||
|AllocateCtxHook||63||X|| ||X | |[[DevHelp_AllocateCtxHook|AllocateCtxHook]]||63||X|| ||X | ||
|- | |- | ||
|AllocGDTSelector||2D|| || ||X | |[[DevHelp_AllocGDTSelector|AllocGDTSelector]]||2D|| || ||X | ||
|- | |- | ||
|AllocPhys||18||X|| ||X | |[[DevHelp_AllocPhys|AllocPhys]]||18||X|| ||X | ||
|- | |- | ||
|AllocReqPacket||D||X|| || | |[[DevHelp_AllocReqPacket|AllocReqPacket]]||D||X|| || | ||
|- | |- | ||
|ArmCtxHook||65||X||X|| X | |[[DevHelp_ArmCtxHook|ArmCtxHook]]||65||X||X|| X | ||
|- | |- | ||
|AttachDD|| 2A||X|| || X | |[[DevHelp_AttachDD|AttachDD]]|| 2A||X|| || X | ||
|- | |- | ||
|Beep|| 52||X||X|| X | |[[DevHelp_Beep|Beep]]|| 52||X||X|| X | ||
|- | |- | ||
|CloseEventSem|| 68||X|| || | |[[DevHelp_CloseEventSem|CloseEventSem]]|| 68||X|| || | ||
|- | |- | ||
|DeRegister|| 21||X|| || | |[[DevHelp_DeRegister|DeRegister]]|| 21||X|| || | ||
|- | |- | ||
|DevDone|| 1||X||X|| | |[[DevHelp_DevDone|DevDone]]|| 1||X||X|| | ||
|- | |- | ||
|DynamicAPI|| 6C||X|| || X | |[[DevHelp_DynamicAPI|DynamicAPI]]|| 6C||X|| || X | ||
|- | |- | ||
|EOI|| 31|| ||X|| X | |[[DevHelp_EOI|EOI]]|| 31|| ||X|| X | ||
|- | |- | ||
|FreeCtxHook|| 64||X|| || X | |[[DevHelp_FreeCtxHook|FreeCtxHook]]|| 64||X|| || X | ||
|- | |- | ||
|FreeGDTSelector|| 53||X|| || X | |[[DevHelp_FreeGDTSelector|FreeGDTSelector]]|| 53||X|| || X | ||
|- | |- | ||
|FreeLIDEntry|| 35||X|| || X | |[[DevHelp_FreeLIDEntry|FreeLIDEntry]]|| 35||X|| || X | ||
|- | |- | ||
|FreePhys||19||X|| || X | |[[DevHelp_FreePhys|FreePhys]]||19||X|| || X | ||
|- | |- | ||
|FreeReqPacket||E||X|| || | |[[DevHelp_FreeReqPacket|FreeReqPacket]]||E||X|| || | ||
|- | |- | ||
|GetDescInfo|| 5D||X||Note 2||X | |[[DevHelp_GetDescInfo|GetDescInfo]]|| 5D||X||Note 2||X | ||
|- | |- | ||
|GetDeviceBlock|| 38|| || ||X | |[[DevHelp_GetDeviceBlock|GetDeviceBlock]]|| 38|| || ||X | ||
|- | |- | ||
|GetDOSVar||24||X|| || X | |[[DevHelp_GetDOSVar|GetDOSVar]]||24||X|| || X | ||
|- | |- | ||
|GetLIDEntry||34||X|| || X | |[[DevHelp_GetLIDEntry|GetLIDEntry]]||34||X|| || X | ||
|- | |- | ||
|InternalError||2B||X|| X|| X | |[[DevHelp_InternalError|InternalError]]||2B||X|| X|| X | ||
|- | |- | ||
|LinToGDTSelector|| 5C||X|| X|| X | |[[DevHelp_LinToGDTSelector|LinToGDTSelector]]|| 5C||X|| X|| X | ||
|- | |- | ||
|LinToPageList|| 5E||X|| X|| X | |[[DevHelp_LinToPageList|LinToPageList]]|| 5E||X|| X|| X | ||
|- | |- | ||
|Lock|| 13||X|| || X | |[[DevHelp_Lock|Lock]]|| 13||X|| || X | ||
|- | |- | ||
|MonFlush|| 23||X|| || | |[[DevHelp_MonFlush|MonFlush]]|| 23||X|| || | ||
|- | |- | ||
|MonitorCreate|| 1F||X|| ||X | |[[DevHelp_MonitorCreate|MonitorCreate]]|| 1F||X|| ||X | ||
|- | |- | ||
|MonWrite|| 22||X|| X|| | |[[DevHelp_MonWrite|MonWrite]]|| 22||X|| X|| | ||
|- | |- | ||
|OpenEventSem|| 67||X|| || | |[[DevHelp_OpenEventSem|OpenEventSem]]|| 67||X|| || | ||
|- | |- | ||
|PageListToGDTSelector|| 60||X||X|| X | |[[DevHelp_PageListToGDTSelector|PageListToGDTSelector]]|| 60||X||X|| X | ||
|- | |- | ||
|PageListToLin|| 5F||X|| X|| X | |[[DevHelp_PageListToLin|PageListToLin]]|| 5F||X|| X|| X | ||
|- | |- | ||
|PhysToGDTSel|| 54||X|| X|| X | |[[DevHelp_PhysToGDTSel|PhysToGDTSel]]|| 54||X|| X|| X | ||
|- | |- | ||
|PhysToGDTSelector|| 2E||X|| X|| X | |[[DevHelp_PhysToGDTSelector|PhysToGDTSelector]]|| 2E||X|| X|| X | ||
|- | |- | ||
|PhysToUVirt|| 17||X|| || X | |[[DevHelp_PhysToUVirt|PhysToUVirt]]|| 17||X|| || X | ||
|- | |- | ||
|PhysToVirt|| 15||X|| X|| X | |[[DevHelp_PhysToVirt|PhysToVirt]]|| 15||X|| X|| X | ||
|- | |- | ||
|PostEventSem|| 69||X|| || | |[[DevHelp_PostEventSem|PostEventSem]]|| 69||X|| || | ||
|- | |- | ||
|ProcBlock||4||X|| || | |[[DevHelp_ProcBlock|ProcBlock]]||4||X|| || | ||
|- | |- | ||
|ProcRun||5||X|| X|| | |[[DevHelp_ProcRun|ProcRun]]||5||X|| X|| | ||
|- | |- | ||
|ProtToReal|| 30||X|| X|| | |[[DevHelp_ProtToReal|ProtToReal]]|| 30||X|| X|| | ||
|- | |- | ||
|PullParticular||B||X||X|| | |[[DevHelp_PullParticular|PullParticular]]||B||X||X|| | ||
|- | |- | ||
|PullRequest||A||X|| X|| | |[[DevHelp_PullRequest|PullRequest]]||A||X|| X|| | ||
|- | |- | ||
|PushRequest|| 9||X|| || | |[[DevHelp_PushRequest|PushRequest]]|| 9||X|| || | ||
|- | |- | ||
|QueueFlush||10||X|| X|| | |[[DevHelp_QueueFlush|QueueFlush]]||10||X|| X|| | ||
|- | |- | ||
|QueueInit|| F||X|| X|| X | |[[DevHelp_QueueInit|QueueInit]]|| F||X|| X|| X | ||
|- | |- | ||
|QueueRead||12||X|| X|| | |[[DevHelp_QueueRead|QueueRead]]||12||X|| X|| | ||
|- | |- | ||
|QueueWrite||11||X|| X|| | |[[DevHelp_QueueWrite|QueueWrite]]||11||X|| X|| | ||
|- | |- | ||
|RealToProt||2F||X|| X|| | |[[DevHelp_RealToProt|RealToProt]]||2F||X|| X|| | ||
|- | |- | ||
|Register||20||X|| || | |[[DevHelp_Register|Register]]||20||X|| || | ||
|- | |- | ||
|RegisterBeep||51||X|| ||X | |[[DevHelp_RegisterBeep|RegisterBeep]]||51||X|| ||X | ||
|- | |- | ||
|RegisterDeviceClass||43|| || ||X | |[[DevHelp_RegisterDeviceClass|RegisterDeviceClass]]||43|| || ||X | ||
|- | |- | ||
|RegisterKrnlExit|| 6F||X|| ||X | |[[DevHelp_RegisterKrnlExit|RegisterKrnlExit]]|| 6F||X|| ||X | ||
|- | |- | ||
|RegisterPDD||50||X|| ||X | |[[DevHelp_RegisterPDD|RegisterPDD]]||50||X|| ||X | ||
|- | |- | ||
|RegisterStackUsage||3A|| || ||X | |[[DevHelp_RegisterStackUsage|RegisterStackUsage]]||3A|| || ||X | ||
|- | |- | ||
|RegisterTmrDD||61|| || ||X | |[[DevHelp_RegisterTmrDD|RegisterTmrDD]]||61|| || ||X | ||
|- | |- | ||
|ResetEventSem||6A||X|| || | |[[DevHelp_ResetEventSem|ResetEventSem]]||6A||X|| || | ||
|- | |- | ||
|ResetTimer||1E||X||X||X | |[[DevHelp_ResetTimer|ResetTimer]]||1E||X||X||X | ||
|- | |- | ||
|ROMCritSection||26||Note 1|| || | |[[DevHelp_ROMCritSection|ROMCritSection]]||26||Note 1|| || | ||
|- | |- | ||
|Save_Message||3D|| || ||X | |[[DevHelp_Save_Message|Save_Message]]||3D|| || ||X | ||
|- | |- | ||
|SchedClock||0||X|| ||X | |[[DevHlp_SchedClock|SchedClock]]||0||X|| ||X | ||
|- | |- | ||
|SemClear||7||X||X|| | |[[DevHelp_SemClear|SemClear]]||7||X||X|| | ||
|- | |- | ||
|SemHandle||8||X||X|| | |[[DevHelp_SemHandle|SemHandle]]||8||X||X|| | ||
|- | |- | ||
|SemRequest||6||X|| || | |[[DevHelp_SemRequest|SemRequest]]||6||X|| || | ||
|- | |- | ||
|SendEvent||25||X||X|| | |[[DevHelp_SendEvent|SendEvent]]||25||X||X|| | ||
|- | |- | ||
|SetIRQ||1B||X|| ||X | |[[DevHelp_SetIRQ|SetIRQ]]||1B||X|| ||X | ||
|- | |- | ||
|SetROMVector||1A||X|| ||X | |[[DevHelp_SetROMVector|SetROMVector]]||1A||X|| ||X | ||
|- | |- | ||
|SetTimer||1D||X|| ||X | |[[DevHelp_SetTimer|SetTimer]]||1D||X|| ||X | ||
|- | |- | ||
|SortRequest||C||X|| || | |[[DevHelp_SortRequest|SortRequest]]||C||X|| || | ||
|- | |- | ||
|TCYield||3||X|| || | |[[DevHelp_TCYield|TCYield]]||3||X|| || | ||
|- | |- | ||
|TickCount||33||X||X||X | |[[DevHelp_TickCount|TickCount]]||33||X||X||X | ||
|- | |- | ||
|UnLock||14||X|| ||X | |[[DevHelp_UnLock|UnLock]]||14||X|| ||X | ||
|- | |- | ||
|UnPhysToVirt||32||X||X||X | |[[DevHelp_UnPhysToVirt|UnPhysToVirt]]||32||X||X||X | ||
|- | |- | ||
|UnSetIRQ||1C||X||X||X | |[[DevHelp_UnSetIRQ|UnSetIRQ]]||1C||X||X||X | ||
|- | |- | ||
|VerifyAccess||27||X|| || | |[[DevHelp_VerifyAccess|VerifyAccess]]||27||X|| || | ||
|- | |- | ||
|VideoPause||3C||X||X||X | |[[DevHelp_VideoPause|VideoPause]]||3C||X||X||X | ||
|- | |- | ||
|VirtToLin||5B||X||X||X | |[[DevHelp_VirtToLin|VirtToLin]]||5B||X||X||X | ||
|- | |- | ||
|VirtToPhys||16||X|| ||X | |[[DevHelp_VirtToPhys|VirtToPhys]]||16||X|| ||X | ||
|- | |- | ||
|VMAlloc||57||X|| ||X | |[[DevHelp_VMAlloc|VMAlloc]]||57||X|| ||X | ||
|- | |- | ||
|VMFree||58||X|| ||X | |[[DevHelp_VMFree|VMFree]]||58||X|| ||X | ||
|- | |- | ||
|VMGlobalToProcess||5A||X|| || | |[[DevHelp_VMGlobalToProcess|VMGlobalToProcess]]||5A||X|| || | ||
|- | |- | ||
|VMLock||55||X|| ||X | |[[DevHelp_VMLock|VMLock]]||55||X|| ||X | ||
|- | |- | ||
|VMProcessToGlobal||59||X|| || | |[[DevHelp_VMProcessToGlobal|VMProcessToGlobal]]||59||X|| || | ||
|- | |- | ||
|VMSetMem||66||X|| ||X | |[[DevHelp_VMSetMem|VMSetMem]]||66||X|| ||X | ||
|- | |- | ||
|VMUnLock||56||X|| ||X | |[[DevHelp_VMUnLock|VMUnLock]]||56||X|| ||X | ||
|- | |- | ||
|Yield||2||X|| || | |[[DevHelp_Yield|Yield]]||2||X|| || | ||
|} | |} | ||
Note: | Note: | ||
Line 502: | Line 502: | ||
* [[DevHelp_SemRequest]] | * [[DevHelp_SemRequest]] | ||
====System Clock Management==== | ====System Clock Management==== | ||
* [[ | * [[DevHlp_SchedClock]] | ||
====System Services==== | ====System Services==== | ||
* [[DevHelp_Beep]] | * [[DevHelp_Beep]] |
Latest revision as of 19:04, 23 May 2025
Many of the functions of an OS/2 physical device driver are related to system operations rather than to hardware operations. An interface to operating system services is available to physical device drivers through the DevHlp Interface.
The Device Helper (DevHlp) services are listed alphabetically with explanations of the purpose, parameters, and calling conventions of each function.
Using DevHlp Services
Access to these system services is obtained during device driver initialization. The request packet for the INIT command contains a pointer to the entry point for the DevHlp interface. This pointer is saved.
Calling the DevHlp Interface Routine from Assembler
A Device Helper service is started by:
- Setting up the appropriate registers. Notice that the DevHlp services pass parameters in registers, as opposed to on the stack.
- Loading a function code into the DL register.
- Making a Far Call to the DevHlp interface routine (whose address was supplied at device driver initialization time), as in:
CALL [Device_Help]
Register Usage
All registers except the Flags register are preserved across calls to DevHlp services unless specified as containing return parameters. The segment registers and the extended portion of the 32-bit registers are also preserved.
State of the Interrupt Flag
The physical device driver can assume that the state of the interrupt flag is preserved, and that the DevHlp routine does not enable interrupts unless stated otherwise in the functional description for each routine. The only exceptions apply to functions that allow the physical device driver to relinquish control of the CPU. Therefore, during calls to functions such as Yield and TCYield, it cannot be assumed that interrupts will remain disabled.
Constant Definitions
In the syntax examples in the following references, the DevHlp functions are called by placing a defined constant into the DL register, as in:
MOV DL, DevHlp_ABIOSCall
These DevHlp_* constants are defined in the DEVHLP.INC header file.
Calling the DevHlp Interface Routine from C
The address of the device helper routine is supplied at device driver initialization time in the request packet. The INIT command acts as a pointer to the entry point of the DevHlp services. This pointer must be saved as in the following example:
extern PFN Device_Help; 1x far pointer to devhlp functions */ Device_Help=PRPH►DevHlpEP;
/*INIT Command Request Packet Structure */ typedef struct_RPINIT { RPH rph; UCHAR Unit; PFN DevHlpEP; PS InitArgs; UCHAR DriveNum; }RPINITIN, FAR *PRPINITIN; PRPINITIN PRPH;
16:16 Virtual Address Conversion
Some of the DevHlp services require 32-bit linear (flat) addresses. The DevHlp service VirtToLin must be called to convert a 16:16 virtual address to a 32-bit linear address. Refer to the appropriate DevHlp service for the type of addressing mode required.
DevHlp Services and Function Codes
All the DevHlp services, listed by function codes, are shown below:
DevHlp Service | Code | Description |
---|---|---|
SchedClock | 0 | Get system clock routine |
DevDone | 1 | Complete Device I/O |
Yield | 2 | Yield the CPU |
TCYield | 3 | Yield the CPU to time-critical threads |
ProcBlock | 4 | Block thread on event |
ProcRun | 5 | Unblock thread |
SemRequest | 6 | Claim a semaphore |
SemClear | 7 | Release a semaphore |
SemHandle | 8 | Get a semaphore handle |
PushRequest | 9 | Add request to list |
PullRequest | A | Remove request from list |
PullParticular | B | Remove a specific request from list |
SortRequest | C | Insert request in sorted order to list |
AllocReqPacket | D | Get a request packet |
FreeReqPacket | E | Free request packet |
QueueInit | F | Initialize character queue |
QueueFlush | 10 | Clear character queue |
QueueWrite | 11 | Put a character in the queue |
QueueRead | 12 | Get a character from the queue |
Lock | 13 | Lock memory segment |
UnLock | 14 | Unlock memory segment |
PhysToVirt | 15 | Map a physical-to-virtual address |
VirtToPhys | 16 | Map a virtual-to-physical address |
PhysToUVirt | 17 | Map a physical address to an application's address space |
AllocPhys | 18 | Allocate physical memory |
FreePhys | 19 | Free physical memory |
SetROMVector* | 1A | Set software interrupt vector |
SetIRQ | 1B | Set a hardware interrupt handler |
UnSetIRQ | 1C | Reset a hardware interrupt handler |
SetTimer | 1D | Set a timer handler |
ResetTimer | 1E | Remove a timer handler |
MonitorCreate | 1F | Create a monitor |
Register | 20 | Install a monitor |
DeRegister | 21 | Remove a monitor |
MonWrite | 22 | Pass data records to monitor |
MonFlush | 23 | Remove all data from data stream |
GetDOSVar | 24 | Return pointer to DOS variable |
SendEvent | 25 | Indicate an event |
ROMCritSection* | 26 | Flag ROM BIOS critical section |
VerifyAccess | 27 | Verify memory access |
Reserved | 28 | |
Reserved | 29 | |
AttachDD | 2A | Obtain a device driver's IDC entry point |
InternalError | 2B | Signal an internal error |
Reserved | 2C | |
AllocGDTSelector | 2D | Allocate GDT descriptors |
PhysToGDTSelector | 2E | Map a physical to virtual address in GDT |
RealToProt* | 2F | Switch from real mode to protect mode |
ProtToReal* | 30 | Switch from protect mode to real mode |
EOI | 31 | Issue an End-Of-Interrupt |
UnPhysToVirt | 32 | Mark PhysToVirt complete |
TickCount | 33 | Modify timer |
GetLIDEntry | 34 | Get Logical ID |
FreeLIDEntry | 35 | Release Logical ID |
ABIOSCall | 36 | Invoke ABIOS function |
ABIOSCommonEntry | 37 | Invoke ABIOS common entry point |
GetDeviceBlock | 38 | Get ABIOS device block |
RegisterStackUsage | 3A | Indicate stack usage |
VideoPause | 3C | Suspend/resume video active threads |
Save_Message | 3D | Display message (for base device drivers) |
RegisterDeviceClass | 43 | Register a physical device driver' direct call command handler entry point with kernel |
RegisterPDD | 50 | Register a 16:16 physical device driver for PDD/VDD communication |
RegisterBeep | 51 | Register a physical device driver's Beep service entry point |
Beep | 52 | Generate a beep |
FreeGDTSelector | 53 | Free selector allocated with AllocateGDTSelector |
PhysToGDTSel | 54 | Map a physical address to a GDT selector |
VMLock | 55 | Lock a linear address range of memory within a segment |
VMUnLock | 56 | Unlock a linear address range of memory within a segment |
VMAlloc | 57 | Allocate a block of physical memory |
VMFree | 58 | Free memory or a mapping |
VMProcessToGlobal | 59 | Map a process address into global address space |
VMGlobalToProcess | 5A | Map a global address into process address space |
VirtToLin | 5B | Convert a selector:offset to a linear address |
LinToGDTSelector | 5C | Convert a linear address to a virtual address |
GetDescInfo | 5D | Get information on the contents of a descriptor |
LinToPageList | 5E | Get the physical pages mapped by a linear range |
PageListToLin | 5F | Map given physical address to a linear address |
PageListToGDTSelector | 60 | Map given physical addresses to a selector |
RegisterTmrDD | 61 | Get the kernel address of Timer value and rollover count |
AllocateCtxHook | 63 | Allocate a context hook |
FreeCtxHook | 64 | Free a context hook |
ArmCtxHook | 65 | Arm a context hook |
VMSetMem | 66 | Commit or decommit physical memory |
OpenEventSem | 67 | Open a 32-bit shared event semaphore |
CloseEventSem | 68 | Close a 32-bit shared event semaphore |
PostEventSem | 69 | Post a 32-bit shared event semaphore |
ResetEventSem | 6A | Reset a 32-bit shared event semaphore |
DynamicAPI | 6C | Dynamically add a Ring 0 system API |
RegisterKrnlExit | 6F |
- No longer used in OS/2 2.x.
DevHlp Services and Device Contexts
As discussed in the section on physical device driver architecture, device driver code can run in one of the following contexts:
- Kernel mode
- Context in which the physical device driver strategy routine runs. Also called task time.
- Interrupt mode
- Context in which the physical device driver hardware interrupt handler runs.
- INIT mode
- Context in which the physical device driver strategy routine runs when it is called with the INIT request packet.
Certain restrictions apply to when individual DevHlp services can be used. The table below shows the contexts in which each DevHlp service can be called: Referenced notes are at the end of the table.
Note:
- The function is no longer supported.
- The function has limitations executing at interrupt time. See the description of this function for details.
Related DevHlp Services
Related DevHlp services can be grouped together into the following categories:
Advanced BIOS Services
- DevHelp_ABIOSCall
- DevHelp_ABIOSCommonEntry
- DevHelp_FreeLIDEntry
- DevHelp_GetDeviceBlock
- DevHelp_GetLIDEntry
Character Queue Management
PDD-VDD Communications Services
Context Hook Services
Interrupt Management
Memory Management
- DevHelp_AllocGDTSelector
- DevHelp_AllocPhys
- DevHelp_FreeGDTSelector
- DevHelp_FreePhys
- DevHelp_LinToGDTSelector
- DevHelp_LinToPageList
- DevHelp_Lock
- DevHelp_PageListToGDTSelector
- DevHelp_PageListToLin
- DevHelp_PhysToGDTSel
- DevHelp_PhysToGDTSelector
- DevHelp_PhysToUVirt
- DevHelp_PhysToVirt
- DevHelp_UnLock
- DevHelp_UnPhysToVirt
- DevHelp_VerifyAccess
- DevHelp_VirtToLin
- DevHelp_VirtToPhys
- DevHelp_VMAlloc
- DevHelp_VMFree
- DevHelp_VMGlobalToProcess
- DevHelp_VMLock
- DevHelp_VMProcessToGlobal
- DevHelp_VMSetMem
- DevHelp_VMUnLock
Monitor Management
Process Management
- DevHelp_ProcBlock
- DevHelp_DevDone
- DevHelp_RegisterStackUsage
- DevHelp_ProcRun
- DevHelp_TCYield
- DevHelp_Yield
Processor Mode Services - No longer used in OS/2 2.X.
Request Queue Management
- DevHelp_AllocReqPacket
- DevHelp_FreeReqPacket
- DevHelp_PullParticular
- DevHelp_PullRequest
- DevHelp_PushRequest
- DevHelp_SortRequest
Semaphore Management
- DevHelp_CloseEventSem
- DevHelp_OpenEventSem
- DevHelp_PostEventSem
- DevHelp_ResetEventSem
- DevHelp_SemClear
- DevHelp_SemHandle
- DevHelp_SemRequest
System Clock Management
System Services
- DevHelp_Beep
- DevHelp_Save_Message
- DevHelp_DynamicAPI
- DevHelp_GetDescInfo
- DevHelp_GetDOSVar
- DevHelp_InternalError
- DevHelp_RegisterBeep
- DevHelp_RegisterKrnlExit
- DevHelp_ROMCritSection
- DevHelp_SendEvent
- DevHelp_VideoPause