?? vxwin.asm
字號:
EnterProc
VMMCall _SelectorMapFlat < dwVMHandle, dwSelector, dwFlags >
LeaveProc
return
EndProc _winSelectorMapFlat
BeginProc _dbgOutput
push ebp
mov ebp, esp
pushfd
pushad
mov esi, dword ptr [ebp+8]
VMMCall Out_Debug_String
popad
popfd
pop ebp
clc
ret
EndProc _dbgOutput
;------------------------------------------------------------------------------
; Routines for reading PCI configuration via bios.
;
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;
; Check for the presences of PCI BIOS Int 1Ah
;
; Returns: NC if BIOS is present.
;BOOL pciCheckBIOS ( VOID );
;
;------------------------------------------------------------------------------
BeginProc _pciCheckBIOS
Argvar pbLastBus, DWORD
ArgVar pbMajorVersion, DWORD
ArgVar pbMinorVersion, DWORD
EnterProc
Mov AH, 0B1h
Mov AL, 01h
Push Dword Ptr 1Ah
VMMCall Exec_VxD_Int
cmp EDX, 020494350h ; " ICP"
jne pciCheckBIOS_fail
mov eax,1
mov esi, pbLastBus
mov byte ptr [esi], cl
mov esi, pbMajorVersion
mov byte ptr [esi], bh
mov esi, pbMinorVersion
mov byte ptr [esi], bl
jmp pciCheckBIOS_exit
pciCheckBIOS_fail :
xor eax, eax
pciCheckBIOS_exit :
LeaveProc
return
EndProc _pciCheckBIOS
;------------------------------------------------------------------------------
;
; pciFindDevice - Search PCI BIOS for a PCI Device
;
;BOOL pciFindDevice ( WORD wDeviceID, WORD wVendorID, WORD wIndex, PBYTE pbBus,
; PBYTE pbDevFunc )
;------------------------------------------------------------------------------
BeginProc _pciFindDevice
ArgVar wDeviceID, WORD
ArgVar wVendorID, WORD
ArgVar wIndex, WORD
Argvar pbBus, DWORD
ArgVar pbDevFunc, DWORD
EnterProc
push esi
push edx
Mov AH, 0b1h
Mov AL, 02h
mov cx, wDeviceID
mov dx, wVendorID
Mov SI, wIndex
Push Dword Ptr 1Ah
VMMCall Exec_VxD_Int
jc pciFindDevice_fail
mov esi, pbBus
mov byte ptr [esi], bh
mov esi, pbDevFunc
mov byte ptr [esi], bl
mov eax, 1
jmp pciFindDevice_exit
pciFindDevice_fail:
xor eax, eax
pciFindDevice_exit :
pop edx
pop esi
LeaveProc
return
EndProc _pciFindDevice
;------------------------------------------------------------------------------
;
; pciFindClass - Search PCI BIOS for a PCI Device by Class
;
;BOOL pciFindClass ( DWORD dwClass, WORD wIndex, PBYTE pbBus,
; PBYTE pbDevFunc )
;------------------------------------------------------------------------------
BeginProc _pciFindClass
ArgVar dwClass, DWORD
ArgVar wIndex, WORD
Argvar pbBus, DWORD
ArgVar pbDevFunc, DWORD
EnterProc
push esi
push edx
Mov AH, 0b1h
Mov AL, 03h
mov ecx, dwClass
Mov SI, wIndex
Push Dword Ptr 1Ah
VMMCall Exec_VxD_Int
jc pciFindClass_fail
mov esi, pbBus
mov byte ptr [esi], bh
mov esi, pbDevFunc
mov byte ptr [esi], bl
mov eax, 1
jmp pciFindClass_exit
pciFindClass_fail:
xor eax, eax
pciFindClass_exit :
pop edx
pop esi
LeaveProc
return
EndProc _pciFindClass
;------------------------------------------------------------------------------
;
; Read PCI Config
;
; In: AL = Size to read (byte, word, dword)
; BH = BUS
; BL = Device
; CL = Function
; DI = Configuration Register Address
;
; Out: ECX = Value Read
;BOOL pciReadConfigDW ( BYTE bBus, BYTE bDevFunc, WORD wRegNum,
; PDWORD pdwValue)
;------------------------------------------------------------------------------
BeginProc _pciReadConfigDW
ArgVar bBus, BYTE
ArgVar bDevFunc, BYTE
Argvar wRegNum, WORD
ArgVar pdwValue, DWORD
EnterProc
push edi
push esi
push ecx
mov ah, 0b1h
mov al, 0ah
mov bh, bBus
mov bl, bDevFunc
mov di, wRegNum
Push Dword Ptr 1Ah
VMMCall Exec_VxD_Int
jc pciReadConfigDW_fail
mov esi, pdwValue
mov dword ptr [esi], ecx
mov eax, 1
jmp pciReadConfigDW_exit
pciReadConfigDW_fail :
xor eax, eax
pciReadConfigDW_exit :
pop ecx
pop esi
pop edi
LeaveProc
return
EndProc _pciReadConfigDW
;------------------------------------------------------------------------------
;
; Write PCI Config
;
; In: AL = Size to write (byte, word, dword)
; BH = BUS
; BL = Device
; CL = Function
; EDX = Value to Write
; DI = Configuration Register Address
;
; Out: ECX = Value Read
;
;BOOL pciWriteConfigDW ( BYTE bBus, BYTE bDevFunc, WORD wRegNum,
; DWORD dwValue)
;------------------------------------------------------------------------------
BeginProc _pciWriteConfigDW
ArgVar bBus, BYTE
ArgVar bDevFunc, BYTE
Argvar wRegNum, WORD
ArgVar dwValue, DWORD
EnterProc
push edi
push esi
push ecx
mov ah, 0b1h
mov al, 0dh
mov bh, bBus
mov bl, bDevFunc
mov di, wRegNum
mov ecx, dwValue
Push Dword Ptr 1Ah
VMMCall Exec_VxD_Int
jc pciWriteConfigDW_fail
mov eax, 1
jmp pciReadConfigDW_exit
pciWriteConfigDW_fail :
xor eax, eax
pciWriteConfigDW_exit :
pop ecx
pop esi
pop edi
LeaveProc
return
EndProc _pciWriteConfigDW
;------------------------------------------------------------------------------
; FUNC winCall_Priority_VM_Event
;
; BOOL winCall_Priority_VM_Event (
; DWORD dwPriorityBoost,
; DWORD dwVMHandle,
; DWORD dwFlags,
; PVOID pvCallbackContext,
; VOID (*pFunc)(VOID),
; DWORD dwTimeOut,
; PDWORD pdwEventHandle );
;------------------------------------------------------------------------------
BeginProc _winCall_Priority_VM_Event
ArgVar dwPriorityBoost,DWORD
ArgVar dwVMHandle,DWORD
ArgVar dwFlags,DWORD
ArgVar pvCallbackContext, DWORD
ArgVar pFunc, DWORD
ArgVar dwTimeOut, DWORD
ArgVar pdwEventHandle, DWORD
EnterProc
push edi
push esi
push edx
mov eax, dwPriorityBoost
mov ebx, dwVMHandle
mov ecx, dwFlags
mov edx, pvCallbackContext
mov esi, pFunc
mov edi, dwTimeOut
VMMCall Call_Priority_VM_Event
mov eax, esi
mov esi, pdwEventHandle
mov [esi], eax
pop edx
pop esi
pop edi
LeaveProc
return
EndProc _winCall_Priority_VM_Event
;------------------------------------------------------------------------------
; FUNC winCancel_Priority_VM_Event
;
; BOOL winCancel_Priority_VM_Event ( DWORD dwEventHandle );
;------------------------------------------------------------------------------
BeginProc _winCancel_Priority_VM_Event
ArgVar dwEventHandle,DWORD
EnterProc
push esi
mov esi, dwEventHandle
VMMCall Cancel_Priority_VM_Event
pop esi
LeaveProc
return
EndProc _winCancel_Priority_VM_Event
;------------------------------------------------------------------------------
; FUNC winSchedule_Global_Event
;
; BOOL winSchedule_Global_Event ( VOID (*pFunc)(VOID),
; PVOID pvCallbackContext, PDWORD pdwEventHandle );
;------------------------------------------------------------------------------
BeginProc _winSchedule_Global_Event
ArgVar dwCallbackAddress, DWORD
ArgVar dwCallbackContext, DWORD
ArgVar pdwHandle, DWORD
EnterProc
push edi
push esi
push edx
mov esi, dwCallbackAddress
mov edx, dwCallbackContext
VMMCall Schedule_Global_Event
mov eax, esi
mov esi, pdwHandle
mov [esi], eax
pop edx
pop esi
pop edi
LeaveProc
return
EndProc _winSchedule_Global_Event
;------------------------------------------------------------------------------
; FUNC winSchedule_VM_Event
;
; BOOL winSchedule_VM_Event (
; DWORD VMHandle,
; VOID (*pFunc)(VOID),
; PVOID pvCallbackContext,
; PDWORD pdwEventHandle );
;------------------------------------------------------------------------------
BeginProc _winSchedule_VM_Event
ArgVar dwVMHandle, DWORD
ArgVar dwCallbackAddress, DWORD
ArgVar dwCallbackContext, DWORD
ArgVar pdwHandle, DWORD
EnterProc
push edi
push esi
push edx
push ebx
mov ebx, dwVMHandle
mov esi, dwCallbackAddress
mov edx, dwCallbackContext
VMMCall Schedule_VM_Event
mov eax, esi
mov esi, pdwHandle
mov [esi], eax
pop ebx
pop edx
pop esi
pop edi
LeaveProc
return
EndProc _winSchedule_VM_Event
BeginProc _winVWIN32_DIOCCompletionRoutine
ArgVar dwEvent, DWORD
EnterProc
mov ebx, dwEvent
VxDCall VWIN32_DIOCCompletionRoutine
LeaveProc
return
EndProc _winVWIN32_DIOCCompletionRoutine
BeginProc _winVWIN32_PulseWin32Event
ArgVar dwEvent, DWORD
EnterProc
mov eax, dwEvent
VxDCall _VWIN32_PulseWin32Event
LeaveProc
return
EndProc _winVWIN32_PulseWin32Event
BeginProc _winVWIN32_SetWin32Event
ArgVar dwEvent, DWORD
EnterProc
mov eax, dwEvent
VxDCall _VWIN32_SetWin32Event
LeaveProc
return
EndProc _winVWIN32_SetWin32Event
BeginProc _winVWIN32_CloseVxDHandle
ArgVar dwHandle, DWORD
EnterProc
mov eax, dwHandle
VxDCall _VWIN32_CloseVxDHandle
LeaveProc
return
EndProc _winVWIN32_CloseVxDHandle
BeginProc _winVWIN32_GetCurrentProcessHandle
EnterProc
VxDCall VWIN32_GetCurrentProcessHandle
; eax returns the current process handle
LeaveProc
return
EndProc _winVWIN32_GetCurrentProcessHandle
;------------------------------------------------------------------------------
;DWORD winVWIN32_SysErrorBox ( PVOID pVSEB );
;------------------------------------------------------------------------------
BeginProc _winVWIN32_SysErrorBox
ArgVar pVSEB, DWORD
EnterProc
mov ebx, pVSEB
VxDCall VWIN32_SysErrorBox
; eax returns the current process handle
LeaveProc
return
EndProc _winVWIN32_SysErrorBox
;debugging code
;
;
BeginProc _winIn_Debug_Chr
ArgVar pbInput, DWORD
EnterProc
push ebx
VMMCall In_Debug_Chr
mov ebx, pbInput
mov byte ptr [ebx], al
pop ebx
LeaveProc
return
EndProc _winIn_Debug_Chr
;------------------------------------------------------------------------------
;VOID winStallProcessorExecution ( DWORD TimeInMicroSeconds )
; 1 Count in edx:eax = .8 uS
; Number of Counts edx:eax = TimeInUSeconds * 10 / 8;
;------------------------------------------------------------------------------
BeginProc _winStallProcessorExecution
ArgVar TimeInMicroSeconds, DWORD
LocalVar Count, DWORD
LocalVar SavedHI, DWORD
LocalVar SavedLO, DWORD
EnterProc
push eax
push edx
mov eax, [TimeInMicroSeconds]
mov edx, 0ah
mul edx
shr eax, 3
xor ecx, ecx
; ecx holds the count that we need to loop
mov Count, eax
VxDcall VTD_Get_Real_Time
mov [SavedHI], edx
mov [SavedLO], eax
winStallProcessorExecutionLoop :
VxDcall VTD_Get_Real_Time
push eax
push edx
sub eax, [SavedLO]
; subtrace without borrow
sub edx, [SavedHI]
add ecx, eax
pop edx
pop eax
mov [SavedHI], edx
mov [SavedLO], eax
Trace_Out " [ VTD_Get_Real_Time : #EDX : #EAX : #ECX ] "
cmp Count, ecx
jnb winStallProcessorExecutionLoop
pop edx
pop eax
LeaveProc
return
EndProc _winStallProcessorExecution
VXD_LOCKED_CODE_ENDS
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -