page    ,132
;-----------------------------Module-Header-----------------------------;
; Module Name:  VFD.ASM
;
;   interface code to VFlatD
;
; Created:  03-20-90
; Author:   Todd Laney [ToddLa]
;
; Copyright (c) 1984-1994 Microsoft Corporation
;
; Restrictions:
;
;-----------------------------------------------------------------------;

?PLM = 1
?WIN = 0
	.xlist
	include cmacros.inc
	include VflatD.inc
        .list

sBegin  Data
	globalD VflatD_Proc, 0
	globalW _hselSecondary, 0
sEnd

sBegin  Code
	.386p
	assumes cs,Code
	assumes ds,nothing
	assumes es,nothing

;---------------------------Public-Routine------------------------------;
; VFDCall - return the version of VFlatD
;
; Returns:
;       Wed 04-Jan-1993 13:45:58 -by-  Todd Laney [ToddLa]
;       Created.
;-----------------------------------------------------------------------;
	assumes ds,Data
	assumes es,nothing

cProc   VFDCall, <NEAR>, <>
cBegin
	push    esi
	push    edi
	push    es
	pushad

	xor     di,di
	mov     es,di
	mov     ax,1684h
        mov     bx,VflatD_Chicago_ID
	int     2fh                         ;returns with es:di-->VFlatD Entry point
	mov     word ptr [VflatD_Proc][0],di
	mov     word ptr [VflatD_Proc][2],es
	mov     ax,es
	or      ax,di
	jne     short call_vfd

	xor     di,di
	mov     es,di
	mov     ax,1684h
        mov     bx,VflatD_Windows_ID
	int     2fh                         ;returns with es:di-->VFlatD Entry point
	mov     word ptr [VflatD_Proc][0],di
	mov     word ptr [VflatD_Proc][2],es
	mov     ax,es
	or      ax,di
        jnz     short call_vfd

	popad
	pop     es
call_vfd_err:
	xor     eax,eax
	xor     ebx,ebx
	xor     ecx,ecx
	xor     edx,edx
	jmp     call_vfd_exit

call_vfd:
	popad
	pop     es
	call    [VflatD_Proc]
	jc      call_vfd_err

call_vfd_exit:
	pop     edi
	pop     esi
cEnd

;---------------------------Public-Routine------------------------------;
; VFDQuery - return the version of VFlatD
;
; Returns:
;       Wed 04-Jan-1993 13:45:58 -by-  Todd Laney [ToddLa]
;       Created.
;-----------------------------------------------------------------------;
	assumes ds,Data
	assumes es,nothing

cProc   VFDQueryVersion, <FAR, PUBLIC, PASCAL>, <>
cBegin
	xor     eax,eax
	mov     edx,VFlatD_Query
	call    VFDCall
	shld    edx,eax,16
cEnd

cProc   VFDQuerySel, <FAR, PUBLIC, PASCAL>, <>
cBegin
	mov     edx,VFlatD_Query
	call	VFDCall
	and	ebx,0000FFFFh
	mov     eax,ebx
	shld    edx,eax,16
cEnd

cProc   VFDQuerySize, <FAR, PUBLIC, PASCAL>, <>
cBegin
	mov     edx,VFlatD_Query
	call    VFDCall
        mov     eax,ecx
	shld    edx,eax,16
cEnd

cProc   VFDQueryBase, <FAR, PUBLIC, PASCAL>, <>
cBegin
	mov     edx,VFlatD_Query
        call    VFDCall
        mov     eax,edx
	shld    edx,eax,16
cEnd

cProc   VFDReset, <FAR, PUBLIC, PASCAL>, <>
cBegin
        mov     edx,VFlatD_ResetBank
	call	VFDCall
cEnd

cProc   VFDBeginLinearAccess, <FAR, PUBLIC, PASCAL>, <>
cBegin
        mov     edx,VFlatD_Begin_Linear_Access
        mov     dh,1        ;; set flag to allow 4k bank to work.
        call    VFDCall
	shld    edx,eax,16
cEnd

cProc   VFDEndLinearAccess, <FAR, PUBLIC, PASCAL>, <>
cBegin
        mov     edx,VFlatD_End_Linear_Access
	call    VFDCall
	shld    edx,eax,16
cEnd


extrn LocalFree: FAR
extrn LocalAlloc: FAR

cProc   LocalAllocSecondary, <FAR, PUBLIC, PASCAL>, <>
        parmW  flags
        parmW  allocsize
cBegin
	mov     ax, _hselSecondary
	test    ax, ax
	jz      AllocError
	push    ds
	mov     ds, ax
	push    flags
	push    allocsize
	call    LocalAlloc
	mov     dx, ds	; assume success
	pop     ds
	test    ax, ax
	jnz     okay
AllocError:
	xor     dx, dx	; nope failed
okay:
cEnd


cProc   LocalFreeSecondary, <FAR, PUBLIC, PASCAL>, <>
        parmW  lp
cBegin
	push    ds
	mov     ax, _hselSecondary
	test    ax, ax
	jz      FreeError
	mov     ds, ax
	push    lp
	call    LocalFree
FreeError:
	pop     ds
cEnd


sEnd

end