dpmi.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 792 行 · 第 1/2 页
H
792 行
/*0xcd 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm [bx] [cx dx] value[ax];
#endif
#pragma aux _DPMIFreeMemoryBlock = \
/*0x87 0xF7*/ " xchg si,di " \
/*0xB8 0x02 0x05*/ " mov ax,0502h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm [di si] value[ax];
#pragma aux _DPMISetDescriptorAccessRights = \
/*0xb8 0x09 0x00*/ " mov ax,9 " \
/*0xcd 0x31*/ _INT_31 \
parm [bx] [cx];
#if defined(__386__)
#pragma aux _DPMILockLinearRegion = \
"mov di,dx" \
"shr edx,16" \
"mov si,dx" \
"mov bx,ax" \
"shr eax,16" \
"mov cx,ax" \
"mov ax,0600h" \
_INT_31 \
"sbb ax,ax" \
parm [eax] [edx] value[ax] modify [bx cx si di];
#pragma aux _DPMIUnlockLinearRegion = \
"mov di,dx" \
"shr edx,16" \
"mov si,dx" \
"mov bx,ax" \
"shr eax,16" \
"mov cx,ax" \
"mov ax,0601h" \
_INT_31 \
"sbb ax,ax" \
parm [eax] [edx] value[ax] modify [bx cx si di];
#else
#pragma aux _DPMILockLinearRegion = \
/*0xb8 0x00 0x06*/ " mov ax,0600h " \
/*0xcd 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm [cx bx] [si di] value[ax];
#pragma aux _DPMIUnlockLinearRegion = \
/*0xb8 0x01 0x06*/ " mov ax,0601h " \
/*0xcd 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm [cx bx] [si di] value[ax];
#endif
#if defined(__386__)
#pragma aux _DPMIAllocateDOSMemoryBlock = \
/*0xB8 0x00 0x01*/ " mov ax,0100h " \
/*0xCD 0x31*/ _INT_31 \
/*0x73 0x02*/ " jnc short ok " \
/*0x2B 0xD2*/ " sub dx,dx " \
" ok: xchg ax,dx " \
" shl eax,16 " \
" mov ax,dx " \
parm[bx] value [eax] modify [dx];
#pragma aux _DPMIFreeDOSMemoryBlock = \
/*0xB8 0x01 0x01*/ " mov ax,0101h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb eax,eax " \
parm[dx] value [eax];
#pragma aux _DPMISimulateRealModeInterrupt = \
"push es" \
"mov es,dx" \
/*0xB8 0x00 0x03*/ " mov ax,0300h " \
/*0xCD 0x31*/ _INT_31 \
"pop es" \
/*0x1B 0xC0*/ " sbb eax,eax " \
parm[bl] [bh] [cx] [dx edi] value [eax];
#pragma aux _DPMICreateCodeSegmentAliasDescriptor = \
/*0xb8 0x0a 0x00*/ " mov ax,000ah " \
/*0xCD 0x31*/ _INT_31 \
"rcl eax,1" \
"ror eax,1" \
parm[bx] value [eax] ;
#pragma aux _DPMIGetDescriptor = \
"push es" \
"mov es,dx" \
"mov ax,000bh" \
_INT_31 \
"pop es" \
"sbb eax,eax" \
parm[bx] [dx edi] value [eax] ;
#pragma aux _DPMISetDescriptor = \
"push es" \
"mov es,dx" \
"mov ax,000ch" \
_INT_31 \
"pop es" \
"sbb eax,eax" \
parm[bx] [dx edi] value [eax] ;
#else
#pragma aux _DPMIAllocateDOSMemoryBlock = \
/*0xB8 0x00 0x01*/ " mov ax,0100h " \
/*0xCD 0x31*/ _INT_31 \
0x73 0x02 /* jnc short ok */ \
/*0x2B 0xD2*/ " sub dx,dx " \
parm[bx] value [dx ax];
#pragma aux _DPMIFreeDOSMemoryBlock = \
/*0xB8 0x01 0x01*/ " mov ax,0101h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm[dx] value [ax];
#pragma aux _DPMISimulateRealModeInterrupt = \
/*0xB8 0x00 0x03*/ " mov ax,0300h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm[bl] [bh] [cx] [es di] value [ax];
#pragma aux _DPMICreateCodeSegmentAliasDescriptor = \
/*0xb8 0x0a 0x00*/ " mov ax,000ah " \
/*0xcd 0x31*/ _INT_31 \
/*0x1b 0xd2*/ " sbb dx,dx " \
parm[bx] value[dx ax];
#pragma aux _DPMIGetDescriptor = \
"mov ax,000bh" \
_INT_31 \
"sbb ax,ax" \
parm[bx] [es di] value [ax] ;
#pragma aux _DPMISetDescriptor = \
"mov ax,000ch" \
_INT_31 \
"sbb ax,ax" \
parm[bx] [es di] value [ax] ;
#endif
#pragma aux _fDPMIAllocateMemoryBlock = \
/*0x06*/ " push es " \
/*0x50*/ " push ax " \
/*0x52*/ " push dx " \
/*0x87 0xd9*/ " xchg bx,cx " \
/*0xb8 0x01 0x05*/ " mov ax,0501H " \
/*0xcd 0x31*/ _INT_31 \
/*0x1b 0xc0*/ " sbb ax,ax " \
/*0x8b 0xd3*/ " mov dx,bx " \
/*0x07*/ " pop es " \
/*0x5b*/ " pop bx " \
/*0x26 0x89 0x0f*/ " mov es:[bx],cx " \
/*0x26 0x89 0x57 0x02*/ " mov es:+2H[bx],dx " \
/*0x26 0x89 0x7f 0x04*/ " mov es:+4H[bx],di " \
/*0x26 0x89 0x77 0x06*/ " mov es:+6H[bx],si " \
/*0x07*/ " pop es " \
parm [ax dx] [bx cx] \
value[ax] modify[bx cx dx di si];
#pragma aux _nDPMIAllocateMemoryBlock = \
/*0x50*/ " push ax " \
/*0x87 0xd9*/ " xchg bx,cx " \
/*0xb8 0x01 0x05*/ " mov ax,0501H " \
/*0xcd 0x31*/ _INT_31 \
/*0x1b 0xc0*/ " sbb ax,ax " \
/*0x8b 0xd3*/ " mov dx,bx " \
/*0x5b*/ " pop bx " \
/*0x89 0x0F*/ " mov ds:[bx],cx " \
/*0x89 0x57 0x02*/ " mov ds:+2H[bx],dx " \
/*0x89 0x7F 0x04*/ " mov ds:+4H[bx],di " \
/*0x89 0x77 0x06*/ " mov ds:+6H[bx],si " \
parm [ax] [bx cx] \
value[ax] modify[bx cx dx di si];
#pragma aux _fDPMIResizeMemoryBlock = \
/*0x06*/ " push es " \
/*0x50*/ " push ax " \
/*0x52*/ " push dx " \
/*0x87 0xF7*/ " xchg si,di " \
/*0x87 0xd9*/ " xchg bx,cx " \
/*0xB8 0x03 0x05*/ " mov ax,0503h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
/*0x8b 0xd3*/ " mov dx,bx " \
/*0x07*/ " pop es " \
/*0x5b*/ " pop bx " \
/*0x26 0x89 0x0f*/ " mov es:[bx],cx " \
/*0x26 0x89 0x57 0x02*/ " mov es:+2H[bx],dx " \
/*0x26 0x89 0x7f 0x04*/ " mov es:+4H[bx],di " \
/*0x26 0x89 0x77 0x06*/ " mov es:+6H[bx],si " \
/*0x07*/ " pop es " \
parm [dx ax] [bx cx] [di si] \
value[ax] modify[di si bx cx dx];
#pragma aux _nDPMIResizeMemoryBlock = \
/*0x50*/ " push ax " \
/*0x87 0xF7*/ " xchg si,di " \
/*0x87 0xd9*/ " xchg bx,cx " \
/*0xB8 0x03 0x05*/ " mov ax,0503h " \
/*0xCD 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
/*0x8b 0xd3*/ " mov dx,bx " \
/*0x5b*/ " pop bx " \
/*0x89 0x0F*/ " mov ds:[bx],cx " \
/*0x89 0x57 0x02*/ " mov ds:+2H[bx],dx " \
/*0x89 0x7F 0x04*/ " mov ds:+4H[bx],di " \
/*0x89 0x77 0x06*/ " mov ds:+6H[bx],si " \
parm [ax] [bx cx] [di si] \
value[ax] modify[di si bx cx dx];
#pragma aux _fDPMIGetFreeMemoryInformation = \
/*0xb8 0x00 0x05*/ " mov ax,0500h " \
/*0xcd 0x31*/ _INT_31 \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm[es di] value[ax];
#pragma aux _nDPMIGetFreeMemoryInformation = \
/*0x06*/ " push es " \
/*0x1E*/ " push ds " \
/*0x07*/ " pop es " \
/*0xb8 0x00 0x05*/ " mov ax,0500h " \
/*0xcd 0x31*/ _INT_31 \
/*0x07*/ " pop es " \
/*0x1B 0xC0*/ " sbb ax,ax " \
parm[di] value[ax];
#if defined(__386__)
#define __DX edx
#else
#define __DX dx
#endif
#pragma aux _DPMIGetRealModeInterruptVector = \
"mov ax,0200h" \
_INT_31 \
parm [bl] value[cx __DX] modify[ax];
#pragma aux _DPMISetRealModeInterruptVector = \
"mov ax,0201h" \
_INT_31 \
parm [bl] [cx __DX] modify[ax];
#pragma aux _DPMIGetPMExceptionVector = \
"mov ax,0202h" \
_INT_31 \
parm [bl] value[cx __DX] modify[ax];
#pragma aux _DPMISetPMExceptionVector = \
"mov ax,0203h" \
_INT_31 \
parm [bl] [cx __DX] modify[ax];
#pragma aux _DPMIGetPMInterruptVector = \
"mov ax,0204h" \
_INT_31 \
parm [bl] value[cx __DX] modify[ax];
#pragma aux _DPMISetPMInterruptVector = \
"mov ax,0205h" \
_INT_31 \
parm [bl] [cx __DX] modify[ax];
#if defined(__386__)
#pragma aux _DPMIAllocateRealModeCallBackAddress = \
"push es" \
"push ds" \
"mov ds,dx" \
"mov esi,eax" \
"mov es,cx" \
"mov edi,ebx" \
"mov ax,0303h" \
_INT_31 \
"pop ds" \
"pop es" \
parm[dx eax] [cx ebx] value[cx edx] modify[edi esi];
#pragma aux _DPMIFreeRealModeCallBackAddress = \
"mov ax,0304h" \
_INT_31 \
parm[cx edx];
#else
#pragma aux _DPMIAllocateRealModeCallBackAddress = \
"push ds" \
"mov ds,dx" \
"mov si,ax" \
"mov ax,0303h" \
_INT_31 \
"pop ds" \
parm[dx ax] [es di] value[cx dx] modify[si];
#pragma aux _DPMIFreeRealModeCallBackAddress = \
"mov ax,0304h" \
_INT_31 \
parm[cx dx];
#endif
#if defined(__386__)
#pragma aux _DPMIRawPMtoRMAddr = \
"mov ah,3" \
"mov al,6" \
"xor edi,edi" \
"stc" \
_INT_31 \
"mov cx,si" \
"jnc L1" \
"xor cx,cx" \
"xor edi,edi" \
"L1:" \
value [cx edi] \
modify exact [eax cx si edi];
#pragma aux _DPMIRawRMtoPMAddr = \
"mov ah,3" \
"mov al,6" \
"stc" \
_INT_31 \
"jnc L1" \
"xor ebx,ebx" \
"jmp short L2" \
"L1:" \
"shl ebx,16" \
"mov bx,cx" \
"L2:" \
value [ebx] \
modify exact [eax cx si edi];
#pragma aux _DPMISaveRMStateAddr = \
"mov ah,3" \
"mov al,5" \
"stc" \
_INT_31 \
"mov cx,si" \
"jnc L1" \
"xor cx,cx" \
"xor edi,edi" \
"L1:" \
value [cx edi] \
modify exact [ax bx cx si edi];
#pragma aux _DPMISavePMStateAddr = \
"mov ah,3" \
"mov al,5" \
_INT_31 \
"jnc L1" \
"xor cx,cx" \
"xor ebx,ebx" \
"jmp short L2" \
"L1:" \
"shl ebx,16" \
"mov bx,cx" \
"L2:" \
value [ebx] \
modify exact [ax bx cx si edi];
#pragma aux _DPMISaveStateSize = \
"mov ah,3" \
"mov al,5" \
_INT_31 \
"jnc L1" \
"xor eax,eax" \
"L1:" \
value [ax] \
modify exact [eax bx cx si edi];
#pragma aux _DPMIGetVenderSpecificAPI = \
"push ds" \
"push es" \
"push fs" \
"push gs" \
"push ebp" \
"mov ds,cx" \
"mov ah,0x0a" \
"mov al,0" \
_INT_31 \
"mov cx,es" \
"jnc L1" \
"xor ecx,ecx" \
"xor edi,edi" \
"L1:" \
"pop ebp" \
"pop gs" \
"pop fs" \
"pop es" \
"pop ds" \
parm [cx esi] value [cx edi] modify [eax ebx ecx edx esi]
#endif
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?