⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vdmadz.asm

📁 Chikago_src.zip
💻 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 + -