📄 vdmadz.asm
字号:
include local.inc
StartCDecl VDMAD_Copy_From_Buffer@20
push ebx
push edi
push esi
mov ecx, [esp+28] ; BufferSize
mov edi, [esp+24] ; BufferOffset
mov esi, [esp+20] ; Region
mov ebx, [esp+16] ; BufferID
VxDCall VDMAD_Copy_From_Buffer
jc @f
; success
mov eax, 1
jmp cpfrmret
@@: ; error
mov edx, eax
mov eax, [esp+32]
mov [eax], edx
xor eax, eax
cpfrmret:
pop esi
pop edi
pop ebx
ret 5*4
EndCDecl VDMAD_Copy_From_Buffer@20
StartCDecl VDMAD_Copy_To_Buffer@20
push ebx
push edi
push esi
mov ecx, [esp+28] ; BufferSize
mov edi, [esp+24] ; BufferOffset
mov esi, [esp+20] ; Region
mov ebx, [esp+16] ; BufferID
VxDCall VDMAD_Copy_To_Buffer
jc @f
; success
mov eax, 1
jmp cptoret
@@: ; error
mov edx, eax
mov eax, [esp+32]
mov [eax], edx
xor eax, eax
cptoret:
pop esi
pop edi
pop ebx
ret 5*4
EndCDecl VDMAD_Copy_To_Buffer@20
StartCDecl VDMAD_Default_Handler@8
pusha
mov ebx, [esp+12] ; VM handle
mov eax, [esp+8] ; DMA handle
VxDCall VDMAD_Default_Handler
popa
ret 2*4
EndCDecl VDMAD_Default_Handler@8
StartCDecl VDMAD_Disable_Translation@8
push ebx
mov ebx, [esp+12] ; VM handle
mov eax, [esp+8] ; DMA handle
VxDCall VDMAD_Disable_Translation
setnc al
and eax, 1
pop ebx
ret 2*4
EndCDecl VDMAD_Disable_Translation@8
StartCDecl VDMAD_Enable_Translation@8
push ebx
mov ebx, [esp+12] ; VM handle
mov eax, [esp+8] ; DMA handle
VxDCall VDMAD_Enable_Translation
setnc al
and eax, 1
pop ebx
ret 2*4
EndCDecl VDMAD_Enable_Translation@8
StartCDecl VDMAD_Get_EISA_Adr_Mode@8
push ebx
mov ebx, [esp+12] ; DMA_Handle
mov eax, [esp+8] ; Channel
VxDCall VDMAD_Get_EISA_Adr_Mode
xor eax, eax
mov al, cl
pop ebx
ret 2*4
EndCDecl VDMAD_Get_EISA_Adr_Mode@8
StartCDecl VDMAD_Get_Region_Info@20
push ebx
push esi
push edx
mov eax, [esp+16] ; DMA handle
VxDCall VDMAD_Get_Region_Info
mov eax, [esp+20] ; buffer ID
mov edx, ebx
and edx, 0Fh
mov [eax], edx
mov eax, [esp+24] ; locked
shr edx, 8
mov [eax], edx
mov eax, [esp+28] ; region
mov [eax], esi
mov eax, [esp+32] ; buffer size
mov [eax], ecx
pop edx
pop esi
pop ebx
ret 5*4
EndCDecl VDMAD_Get_Region_Info@20
StartCDecl VDMAD_Get_Virt_State@20
push ebx
push esi
mov ebx, [esp+16] ; VM handle
mov eax, [esp+12] ; DMA handle
VxDCall VDMAD_Get_Virt_State
mov eax, [esp+20] ; address
mov [eax], esi
mov eax, [esp+24] ; count
mov [eax], ecx
mov eax, [esp+28] ; mode
mov [eax], edx
pop esi
pop ebx
ret 5*4
EndCDecl VDMAD_Get_Virt_State@20
StartCDecl VDMAD_Lock_DMA_Region@24
push esi
mov edx, 0
mov eax, [esp+28] ; 0 error value
mov [eax], edx
mov edx, [esp+16] ; DMA region
mov ecx, [esp+12] ; Region size
mov esi, [esp+8] ; DMA region
VxDCall VDMAD_Lock_DMA_Region
jc @f
mov eax, [esp+20] ; success
mov [eax], edx ; store DMA address
mov eax, 1
pop esi
ret 6*4
@@: ; error
mov edx, eax ; save error
mov eax, [esp+24] ; count
mov [eax], ecx
mov eax, [esp+28] ; error
mov [eax], edx
xor eax, eax
pop esi
ret 6*4
EndCDecl VDMAD_Lock_DMA_Region@24
StartCDecl VDMAD_Mask_Channel@4
mov eax, [esp+4]
VxDCall VDMAD_Mask_Channel
EndCDecl VDMAD_Mask_Channel@4
StartCDecl VDMAD_Phys_Mask_Channel@4
mov eax, [esp+4]
VxDCall VDMAD_Phys_Mask_Channel
EndCDecl VDMAD_Phys_Mask_Channel@4
StartCDecl VDMAD_Phys_Unmask_Channel@8
push ebx
mov ebx, [esp+12] ; VM handle
mov edx, [esp+8] ; DMA handle
VxDCall VDMAD_Phys_Unmask_Channel
pop ebx
ret 2*4
EndCDecl VDMAD_Phys_Unmask_Channel@8
StartCDecl VDMAD_Release_Buffer@4
push ebx
mov ebx, [esp+8] ; Buffer
VxDCall VDMAD_Release_Buffer
setnc al
and eax, 1
pop ebx
ret 1*4
EndCDecl VDMAD_Release_Buffer@4
StartCDecl VDMAD_Request_Buffer@20
push esi
push ebx
mov ecx, [esp+16] ; Region size
mov esi, [esp+12] ; DMA region
VxDCall VDMAD_Request_Buffer
jc @f
; success
mov eax, [esp+20] ; ID
mov [eax], ebx
mov eax, [esp+24] ; physical address
mov [eax], edx
mov eax, 1
jmp regbfret
@@: ; error
mov edx, eax
mov eax, [esp+28]
mov [eax], edx
xor eax, eax
regbfret:
pop ebx
pop esi
ret 5*4
EndCDecl VDMAD_Request_Buffer@20
StartCDecl VDMAD_Reserve_Buffer_Space@8
mov ecx, [esp+8] ; maximum address
mov eax, [esp+4] ; page count
VxDCall VDMAD_Reserve_Buffer_Space
ret 2*4
EndCDecl VDMAD_Reserve_Buffer_Space@8
StartCDecl VDMAD_Scatter_Lock@12
push esi
push ebx
push edi
mov edi, [esp+24] ; DDS
mov eax, [esp+20] ; flags
mov ebx, [esp+16] ; VM handle
VxDCall VDMAD_Scatter_Lock
setnc al
setnz bl
shl ebx, 1
add eax, ebx
and eax, 3
pop edi
pop ebx
pop esi
ret 3*4
EndCDecl VDMAD_Scatter_Lock@12
StartCDecl VDMAD_Scatter_Unlock@12
push ebx
push edi
mov edi, [esp+20] ; DDS
mov eax, [esp+16] ; flags
mov ebx, [esp+12] ; VM handle
VxDCall VDMAD_Scatter_Unlock
setnc al
and eax, 1
pop edi
pop ebx
ret 3*4
EndCDecl VDMAD_Scatter_Unlock@12
StartCDecl VDMAD_Set_EISA_Adr_Mode@12
push ebx
mov ecx, [esp+16] ; mode
mov ebx, [esp+12] ; DMA handle
mov eax, [esp+8] ; channel
VxDCall VDMAD_Set_EISA_Adr_Mode
pop ebx
ret 3*4
EndCDecl VDMAD_Set_EISA_Adr_Mode@12
StartCDecl VDMAD_Set_IO_Address@8
mov edx, [esp+8] ; port number
mov eax, [esp+4] ; channel number
VxDCall VDMAD_Set_IO_Address
ret 2*4
EndCDecl VDMAD_Set_IO_Address@8
StartCDecl VDMAD_Set_Phys_State@16
push ebx
mov edx, [esp+20] ; Extended mode
shl edx, 8
mov ecx, [esp+16] ; Mode
mov dl, cl
mov ebx, [esp+12] ; VM handle
mov eax, [esp+8] ; DMA handle
VxDCall VDMAD_Set_Phys_State
mov eax, 0
pop ebx
ret 4*4
EndCDecl VDMAD_Set_Phys_State@16
StartCDecl VDMAD_Set_Region_Info@24
push ebx
push esi
mov edx, [esp+32] ; Physical address
mov ecx, [esp+28] ; Region size
mov esi, [esp+24] ; Region
mov eax, [esp+20] ; Lock status
mov ebx, eax
shl ebx, 8
mov eax, [esp+16] ; Buffer ID
mov bl, al
mov eax, [esp+12] ; DMA handle
VxDCall VDMAD_Set_Region_Info
xor eax, eax
pop esi
pop ebx
ret 6*4
EndCDecl VDMAD_Set_Region_Info@24
StartCDecl VDMAD_Set_Virt_State@24
push ebx
push esi
mov dh, [esp+32] ; ext mode
mov dl, [esp+28] ; mode
mov ecx, [esp+24] ; size
mov esi, [esp+20] ; Address
mov ebx, [esp+16] ; VM handle
mov eax, [esp+12] ; DMA handle
VxDCall VDMAD_Set_Virt_State
pop esi
pop ebx
ret 6*4
EndCDecl VDMAD_Set_Virt_State@24
StartCDecl VDMAD_Unlock_DMA_Region@8
push esi
mov ecx, [esp+12] ; size
mov esi, [esp+8] ; DMA region
VxDCall VDMAD_Unlock_DMA_Region
setnc al
and eax, 1
pop esi
ret 2*4
EndCDecl VDMAD_Unlock_DMA_Region@8
StartCDecl VDMAD_Unlock_DMA_Region_No_Dirty@8
push esi
mov ecx, [esp+12] ; size
mov esi, [esp+8] ; DMA region
VxDCall VDMAD_Unlock_DMA_Region_No_Dirty
setnc al
and eax, 1
pop esi
ret 2*4
EndCDecl VDMAD_Unlock_DMA_Region_No_Dirty@8
StartCDecl VDMAD_UnMask_Channel@8
push ebx
mov ebx, [esp+12] ; VM handle
mov eax, [esp+8] ; DMA handle
VxDCall VDMAD_UnMask_Channel
pop ebx
ret 2*4
EndCDecl VDMAD_UnMask_Channel@8
StartCDecl VDMAD_Unvirtualize_Channel@4
mov eax, [esp+4]
VxDCall VDMAD_Unvirtualize_Channel
setnc al
and eax, 1
ret 1*4
EndCDecl VDMAD_Unvirtualize_Channel@4
StartCDecl VDMAD_Virtualize_Channel@8
push ebx
push edi
push esi
mov esi, [esp+20] ; Callback
mov eax, [esp+16] ; Channel
VxDCall VDMAD_Virtualize_Channel
jnc @f
xor eax, eax
@@:
pop esi
pop edi
pop ebx
ret 2*4
EndCDecl VDMAD_Virtualize_Channel@8
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -