devaux.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 775 行 · 第 1/2 页
H
775 行
"call dword ptr [Device_Help]" \
"jc error" \
"mov es:[di],bx" \
"mov es:[di+2],ax" \
"sub ax,ax" \
"error:" \
value [ax] \
parm caller [ax] [bh] [bl] [es di] \
modify exact [ax dl];
USHORT DevHelp_UnLock( ULONG LockHandle );
#pragma aux DevHelp_UnLock = \
"xchg ax,bx" \
"mov dl,14h" \
DEVHELP_CALL \
parm nomemory [ax bx] \
modify nomemory exact [ax bx dl];
USHORT DevHelp_PhysToVirt( ULONG PhysAddr, USHORT usLength, PVOID SelOffset, PUSHORT ModeFlag );
#pragma aux DevHelp_PhysToVirt = \
"xchg ax,bx" \
"mov dx,15h" \
"push ds" \
"call dword ptr [Device_Help]" \
"jc error" \
"sub ax,ax" \
"mov es:[di],si" \
"mov es:[di+2],ds" \
"error:" \
"pop ds" \
value [ax] \
parm caller nomemory [bx ax] [cx] [es di] [] \
modify exact [ax bx dx si];
USHORT DevHelp_VirtToPhys( PVOID SelOffset, PPHYSADDR PhysAddr );
#pragma aux DevHelp_VirtToPhys = \
"push ds" \
"mov dl,16h" \
"push es" \
"mov si,ds" \
"mov es,si" \
"mov ds,bx" \
"mov si,ax" \
"call dword ptr es:[Device_Help]" \
"pop es" \
"mov es:[di+0],bx" \
"mov es:[di+2],ax" \
"pop ds" \
"sub ax,ax" \
value [ax] \
parm caller nomemory [ax bx] [es di] \
modify exact [ax bx dl si];
/* DevHelp_PhysToUVirt request types */
typedef enum {
SELTYPE_R3CODE = 0,
SELTYPE_R3DATA,
SELTYPE_FREE,
SELTYPE_R2CODE,
SELTYPE_R2DATA,
SELTYPE_R3VIDEO
} DHPhysToUVirt_flags;
USHORT DevHelp_PhysToUVirt( ULONG PhysAddr, USHORT Length, USHORT flags, USHORT TagType, PVOID SelOffset );
#pragma aux DevHelp_PhysToUVirt = \
"xchg ax,bx" \
"mov dl,17h" \
"call dword ptr [Device_Help]" \
"jc error" \
"push es" \
"push bx" \
"mov bx,sp" \
"les bx,ss:[bx+4]" \
"pop es:[bx+0]" \
"pop es:[bx+2]" \
"sub ax,ax" \
"error:" \
value [ax] \
parm caller nomemory [bx ax] [cx] [dh] [si] [] \
modify exact [ax bx dl es];
/* DevHelp_AllocPhys allocation flags */
typedef enum {
MEMTYPE_ABOVE_1M = 0,
MEMTYPE_BELOW_1M
} DHAllocPhys_flags;
USHORT DevHelp_AllocPhys( ULONG lSize, USHORT MemType, PULONG PhysAddr );
#pragma aux DevHelp_AllocPhys = \
"xchg ax,bx" \
"mov dl,18h" \
"call dword ptr [Device_Help]" \
"jc error" \
"mov es:[di+0],bx" \
"mov es:[di+2],ax" \
"sub ax,ax" \
"error:" \
value [ax] \
parm caller nomemory [ax bx] [dh] [es di] \
modify exact [ax bx dx];
USHORT DevHelp_FreePhys( ULONG PhysAddr );
#pragma aux DevHelp_FreePhys = \
"xchg ax,bx" \
"mov dl,19h" \
"call dword ptr [Device_Help]" \
"mov ax,0" \
"sbb ax,0" \
value [ax] \
parm caller nomemory [ax bx] \
modify exact [ax bx dl];
USHORT DevHelp_SetIRQ( NPFN IRQHandler, USHORT IRQLevel, USHORT SharedFlag );
#pragma aux DevHelp_SetIRQ = \
"mov dl,1Bh" \
DEVHELP_CALL \
parm caller nomemory [ax] [bx] [dh] \
modify nomemory exact [ax dl];
USHORT DevHelp_UnSetIRQ( USHORT IRQLevel );
#pragma aux DevHelp_UnSetIRQ = \
"mov dl,1Ch" \
DEVHELP_CALL \
parm caller nomemory [bx] \
modify nomemory exact [ax dl];
USHORT DevHelp_SetTimer( NPFN TimerHandler );
#pragma aux DevHelp_SetTimer = \
"mov dl,1Dh" \
DEVHELP_CALL \
parm caller nomemory [ax] \
modify nomemory exact [ax dl];
USHORT DevHelp_ResetTimer( NPFN TimerHandler );
#pragma aux DevHelp_ResetTimer = \
"mov dl,1Eh" \
DEVHELP_CALL \
parm caller nomemory [ax] \
modify nomemory exact [ax dl];
/* DevHelp_GetDOSVar identifiers */
typedef enum {
DHGETDOSV_SYSINFOSEG = 1,
DHGETDOSV_LOCINFOSEG = 2,
DHGETDOSV_VECTORSDF = 4,
DHGETDOSV_VECTORREBOOT = 5,
DHGETDOSV_VECTORMSATS = 6,
DHGETDOSV_YIELDFLAG = 7,
DHGETDOSV_TCYIELDFLAG = 8,
DHGETDOSV_DOSCODEPAGE = 11,
DHGETDOSV_INTERRUPTLEV = 13,
DHGETDOSV_DEVICECLASSTABLE = 14,
DHGETDOSV_DMQSSEL = 15,
DHGETDOSV_APMINFO = 16
} DHGetDOSVar_Index;
USHORT DevHelp_GetDOSVar( DHGetDOSVar_Index VarNumber, USHORT VarMember, PPVOID KernelVar );
#pragma aux DevHelp_GetDOSVar = \
"mov dl,24h" \
"call dword ptr [Device_Help]" \
"mov es:[di+0],bx" \
"mov es:[di+2],ax" \
"sub ax,ax" \
value [ax] \
parm caller nomemory [al] [cx] [es di] \
modify exact [ax bx dl];
/* DevHelp_SendEvent event codes */
typedef enum {
EVENT_MOUSEHOTKEY = 0,
EVENT_CTRLBREAK,
EVENT_CTRLC,
EVENT_CTRLNUMLOCK,
EVENT_CTRLPRTSC,
EVENT_SHIFTPRTSC,
EVENT_KBDHOTKEY,
EVENT_KBDREBOOT
} DHSendEvent_code;
USHORT DevHelp_SendEvent( USHORT EventType, USHORT Parm );
#pragma aux DevHelp_SendEvent = \
"mov dl,25h" \
"call dword ptr [Device_Help]" \
"mov ax,0" \
"sbb ax,0" \
value [ax] \
parm nomemory [ah] [bx] \
modify nomemory exact [ax dl];
/* DevHelp_VerifyAccess access types */
typedef enum {
VERIFY_READONLY = 0,
VERIFY_READWRITE
} DHVerifyAccess_type;
USHORT DevHelp_VerifyAccess( SEL MemSelector, USHORT Length, USHORT MemOffset, UCHAR AccessFlag );
#pragma aux DevHelp_VerifyAccess = \
"mov dl,27h" \
DEVHELP_CALL \
parm caller nomemory [ax] [cx] [di] [dh] \
modify nomemory exact [ax dl];
/* Modified version of VerifyAccess that takes a far pointer instead of selector/offset */
USHORT DevHelp_VerifyAccessPtr( PVOID Pointer, USHORT Length, UCHAR AccessFlag );
#pragma aux DevHelp_VerifyAccessPtr = \
"xchg ax,di" \
"mov dl,27h" \
DEVHELP_CALL \
parm caller nomemory [ax di] [cx] [dh] \
modify nomemory exact [ax dl di];
typedef struct _IDCTABLE {
USHORT RealOffset; /* obsolete */
USHORT RealCS; /* obsolete */
USHORT RealDS; /* obsolete */
VOID (FAR *ProtIDCEntry)( VOID );
USHORT ProtDS;
} IDCTABLE, NEAR *NPIDCTABLE;
USHORT DevHelp_AttachDD( NPSZ DDName, NPIDCTABLE DDTable );
#pragma aux DevHelp_AttachDD = \
"mov dl,2Ah" \
"call dword ptr [Device_Help]" \
"mov ax,0" \
"sbb ax,0" \
value [ax] \
parm caller [bx] [di] \
modify exact [ax dl];
USHORT DevHelp_InternalError( PSZ MsgText, USHORT MsgLength );
#pragma aux DevHelp_InternalError = \
"push ds" \
"push es" \
"pop ds" \
"pop es" \
"mov dl,2Bh" \
"jmp dword ptr es:[Device_Help]" \
parm [es si] [di] \
modify nomemory exact [] \
aborts;
USHORT DevHelp_AllocGDTSelector( PSEL Selectors, USHORT Count );
#pragma aux DevHelp_AllocGDTSelector = \
"mov dl,2Dh" \
DEVHELP_CALL \
parm caller [es di] [cx] \
modify nomemory exact [ax dl];
USHORT DevHelp_FreeGDTSelector( SEL Selector );
#pragma aux DevHelp_FreeGDTSelector = \
"mov dl,53h" \
DEVHELP_CALL \
parm caller nomemory [ax] \
modify nomemory exact [ax dl];
/* GDT selector mapping types for PhysToGDTSel and PageListToGDTSelector */
typedef enum {
GDTSEL_R3CODE = 0,
GDTSEL_R3DATA = 1,
GDTSEL_R2CODE = 3,
GDTSEL_R2DATA = 4,
GDTSEL_R0CODE = 5,
GDTSEL_R0DATA = 6,
GDTSEL_ADDR32 = 128
} DHGDT_mapType;
// TODO: use pops instead of moves from stack
USHORT DevHelp_PhysToGDTSel( ULONG PhysAddr, ULONG Count, SEL Selector, UCHAR Access );
#pragma aux DevHelp_PhysToGDTSel = \
"push bp" \
"mov dl,54h" \
"mov bp,sp" \
"mov eax,[bp+2]" \
"mov ecx,[bp+6]" \
"mov si,[bp+10]" \
"mov dh,[bp+12]" \
"call dword ptr [Device_Help]" \
"jc error" \
"sub ax,ax" \
"error:" \
"pop bp" \
value [ax] \
parm caller nomemory [] \
modify nomemory exact [ax cx dx si];
USHORT DevHelp_VirtToLin( SEL Selector, ULONG Offset, PLIN LinearAddr );
#pragma aux DevHelp_VirtToLin = \
"mov esi,[esp]" \
"mov dl,5Bh" \
"call dword ptr [Device_Help]" \
"jc error" \
"les bx,[esp+4]" \
"mov es:[bx],eax" \
"sub ax,ax" \
"error:" \
value [ax] \
parm caller nomemory [ax] [] \
modify exact [ax si es bx dl];
/* Modified version of VirtToLin that takes a far pointer instead of selector/offset */
USHORT DevHelp_VirtToLinPtr( PVOID Pointer, PLIN LinearAddr );
#pragma aux DevHelp_VirtToLinPtr = \
"xchg ax,si" \
"movzx esi,si" \
"mov dl,5Bh" \
"call dword ptr [Device_Help]" \
"jc error" \
"pop bx" \
"pop es" \
"mov es:[bx],eax" \
"sub ax,ax" \
"error:" \
value [ax] \
parm routine nomemory [ax si] [] \
modify exact [ax si es bx dl];
USHORT DevHelp_OpenEventSem( ULONG hEvent );
#pragma aux DevHelp_OpenEventSem = \
"pop eax" \
"mov dl,67h" \
DEVHELP_CALL \
parm routine nomemory [] \
modify nomemory exact [ax dl];
USHORT DevHelp_CloseEventSem( ULONG hEvent );
#pragma aux DevHelp_CloseEventSem = \
"pop eax" \
"mov dl,68h" \
DEVHELP_CALL \
parm routine nomemory [] \
modify nomemory exact [ax dl];
USHORT DevHelp_PostEventSem( ULONG hEvent );
#pragma aux DevHelp_PostEventSem = \
"pop eax" \
"mov dl,69h" \
DEVHELP_CALL \
parm routine nomemory [] \
modify nomemory exact [ax dl];
USHORT DevHelp_ResetEventSem( ULONG hEvent, LIN pNumPosts );
#pragma aux DevHelp_ResetEventSem = \
"pop eax" \
"pop edi" \
"mov dl,6Ah" \
DEVHELP_CALL \
parm routine nomemory [] \
modify exact [ax dl di];
#ifdef __cplusplus
extern "C" {
#endif
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?