www.pudn.com > fxvmm210.zip > _FX_API.ASM


;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
; 
; Main Routines for FXVMM 
; 
 
	TITLE  FXVMM_API 
 
	.386p 
	.387 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
FXVMM_API_TEXT	SEGMENT	BYTE public USE16 'CODE' 
FXVMM_API_TEXT	ENDS 
 
_DATA	SEGMENT	WORD public USE16 'DATA' 
_DATA	ENDS 
 
_BSS	SEGMENT	WORD public USE16 'BSS' 
_BSS	ENDS 
 
DGROUP	GROUP	_DATA, _BSS 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°[Includes]±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
include ..\source.asm\_fxvmm.inc 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°[Externals]±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
	extrn		_free:NEAR 
	extrn		_malloc:NEAR 
	extrn		_exit:NEAR 
	extrn		_memcpy:NEAR 
	extrn		_puts:NEAR 
	extrn		F_SCOPY@:NEAR 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°[Publics]±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
	public	 __fxvmm_initialize 
	public	 __fxvmm_vermajor 
	public	 __fxvmm_verminor 
	public	 __fxvmm_error 
	public	 __fxvmm_splitnode 
	public	 __fxvmm_alloc 
	public	 __fxvmm_realloc 
	public	 __fxvmm_free 
	public	 __fxvmm_deinitialize 
	public	 __fxvmm_absread 
	public	 __fxvmm_read 
	public	 __fxvmm_abswrite 
	public	 __fxvmm_write 
	public	 __fxvmm_absmove 
	public	 __fxvmm_move 
	public	 __fxvmm_setpos 
	public	 __fxvmm_set_strategy 
 
	public	 _fxvmm_global_xms_handle 
	public	 _fxvmm_global_ems_handle 
	public	 _fxvmm_global_vrt_handle 
	public	 _fxvmm_global_dos_handle 
 
	public	 _fxvmm_bufsource 
	public	 _fxvmm_firstblk 
	public	 _fxvmm_error_code 
 
FXVMM_API_TEXT	SEGMENT 
	assume	cs: FXVMM_API_TEXT 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°[þCODEþ]±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±° 
 
__fxvmm_vermajor: 
	mov  al, FXVMM_VERSION_MAJOR 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_verminor: 
	mov  al, FXVMM_VERSION_MINOR 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_initialize:           ; we don't have to anything here 
        xor al,al             ; just return TRUE 
        mov al, TRUE          ; 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_error:                                ; error code procedure 
	push	bp 
	mov	bp,sp 
	sub	sp,+002h 
	assume	ds: DGROUP 
	mov	ax,_fxvmm_error_code 
	mov	[bp-002h],ax 
	mov	word ptr _fxvmm_error_code,0000h 
	mov	ax,[bp-002h] 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_splitnode: 
	push	bp 
	mov	bp,sp 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+010h] 
	jnz	@@L1 
	cmp	dx,[bp+00Eh] 
	jnz	@@L1 
	les	bx,dword ptr [bp+00Ah] 
	or	byte ptr es:[bx+002h],80h 
	les	bx,dword ptr [bp+006h] 
	mov	word ptr es:[bx],0EDCBh 
	push	word ptr [bp+008h] 
	push	word ptr [bp+006h] 
	call	far ptr _free 
	add	sp,+004h 
	pop	bp 
	retf 
@@L1:	push	word ptr [bp+008h] 
	push	word ptr [bp+006h] 
	push	word ptr [bp+00Ch] 
	push	word ptr [bp+00Ah] 
	mov	cx,001Bh 
	call	far ptr F_SCOPY@ 
	les	bx,dword ptr [bp+006h] 
	and	byte ptr es:[bx+002h],7Fh 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	_fxvmm_tmpval01,ax 
	mov	_fxvmm_rovblock,dx 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	les	bx,dword ptr [bp+006h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	mov	ax,[bp+00Ch] 
	mov	dx,[bp+00Ah] 
	cmp	ax,_fxvmm_tmpval02 
	jnz	@@L4 
	cmp	dx,_fxvmm_last 
	jnz	@@L4 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L4:	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jz	@@L5 
	les	bx,dword ptr [bp+00Ah] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
@@L5:	les	bx,dword ptr [bp+006h] 
	mov	ax,[bp+00Ch] 
	mov	dx,[bp+00Ah] 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	sub	dx,[bp+00Eh] 
	sbb	ax,[bp+010h] 
	les	bx,dword ptr [bp+006h] 
	mov	es:[bx+005h],ax 
	mov	es:[bx+003h],dx 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,[bp+010h] 
	mov	dx,[bp+00Eh] 
	mov	es:[bx+005h],ax 
	mov	es:[bx+003h],dx 
	les	bx,dword ptr [bp+00Ah] 
	or	byte ptr es:[bx+002h],80h 
	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_vrt_handle 
	jnz	@@L6 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	add	dx,[bp+00Eh] 
	adc	ax,[bp+010h] 
	les	bx,dword ptr [bp+006h] 
	mov	es:[bx+015h],ax 
	mov	es:[bx+013h],dx 
	pop	bp 
	retf 
@@L6:	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+019h] 
	mov	dx,es:[bx+017h] 
	add	dx,[bp+00Eh] 
	adc	ax,[bp+010h] 
	les	bx,dword ptr [bp+006h] 
	mov	es:[bx+019h],ax 
	mov	es:[bx+017h],dx 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_alloc: 
	push	bp 
	mov	bp,sp 
	sub	sp,+008h 
	push	si 
	mov	ax,_fxvmm_tmpval03 
	or	ax,_fxvmm_tmpval04 
	jnz	@@L9 
	les	bx,dword ptr _fxvmm_dosalptr 
	mov	ax,es:[bx+002h] 
	mov	dx,es:[bx] 
	mov	_fxvmm_tmpval04,ax 
	mov	_fxvmm_tmpval03,dx 
	jmp	short @@L11 
@@L9:	les	bx,dword ptr _fxvmm_dosalptr 
	mov	ax,es:[bx+002h] 
	mov	dx,es:[bx] 
	sub	dx,_fxvmm_tmpval03 
	sbb	ax,_fxvmm_tmpval04 
	or	ax,ax 
@@L11:	mov	ax,[bp+006h] 
	or	ax,[bp+008h] 
	jnz	@@L14 
	jmp	@@L15 
@@L14:	mov	ax,001Bh 
	push	ax 
	call	far ptr _malloc 
	add	sp,+002h 
	mov	[bp-002h],dx 
	mov	[bp-004h],ax 
	mov	ax,[bp-004h] 
	or	ax,[bp-002h] 
	jnz	@@L16 
	jmp	@@L17 
@@L16:	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx],0FEDCh 
	mov	ax,_fxvmm_rovblock 
	or	ax,_fxvmm_tmpval01 
	jz	@@L18 
	les	bx,dword ptr _fxvmm_rovblock 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+008h] 
	jc	@@L18 
	jnz	@@L19 
	cmp	dx,[bp+006h] 
	jc	@@L18 
@@L19:	mov	ax,_fxvmm_tmpval01 
	mov	dx,_fxvmm_rovblock 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push	_fxvmm_tmpval01 
	push	_fxvmm_rovblock 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	mov	dx,[bp-006h] 
	mov	ax,[bp-008h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L18:	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx+005h],0000h 
	mov	word ptr es:[bx+003h],0000h 
	xor	si,si 
	jmp	short @@L20 
@@L24:	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	cmp	word ptr [bx+_fxvmm_bufsource],+000h 
	jz	@@L21 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval05] 
	add	sp,+008h 
	or	ax,ax 
	jnz	@@L23 
@@L21:	inc	si 
@@L20:	cmp	si,+004h 
	jl	@@L24 
@@L23:	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+003h] 
	or	ax,es:[bx+005h] 
	jnz	@@L25 
	jmp	@@L26 
@@L25:	les	bx,dword ptr [bp-004h] 
	or	byte ptr es:[bx+002h],80h 
	mov	ax,_fxvmm_firstblk 
	or	ax,_fxvmm_tmpval09 
	jnz	@@L28 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
	mov	_fxvmm_tmpval09,ax 
	mov	_fxvmm_firstblk,dx 
	les	bx,dword ptr [bp-004h] 
	xor	ax,ax 
	xor	dx,dx 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
	les	bx,dword ptr [bp-004h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	jmp	short @@L29 
@@L28:	les	bx,dword ptr [bp-004h] 
	mov	ax,_fxvmm_tmpval02 
	mov	dx,_fxvmm_last 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
	les	bx,dword ptr _fxvmm_last 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx+00Dh],0000h 
	mov	word ptr es:[bx+00Bh],0000h 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L29:	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+008h] 
	jnc	@@L30 
	jmp	@@L17 
@@L30:	jnbe	@@L31 
	cmp	dx,[bp+006h] 
	jnbe	@@L31 
	jmp	@@L17 
@@L31:	mov	ax,001Bh 
	push	ax 
	call	far ptr _malloc 
	add	sp,+002h 
	mov	[bp-006h],dx 
	mov	[bp-008h],ax 
	mov	ax,[bp-008h] 
	or	ax,[bp-006h] 
	jz	@@L32 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp-006h] 
	push    word ptr [bp-008h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	les	bx,dword ptr [bp-008h] 
	mov	word ptr es:[bx],0FEDCh 
@@L32:	mov	dx,[bp-002h] 
	mov	ax,[bp-004h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
	jmp	@@L17 
@@L26:	mov	ax,_fxvmm_tmpval09 
	mov	dx,_fxvmm_firstblk 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
	jmp	short @@L33 
@@L36:	les	bx,dword ptr [bp-008h] 
	mov	al,es:[bx+002h] 
	mov	cl,07h 
	shr	ax,cl 
	and	ax,0001h 
	or	ax,ax 
	jnz	@@L34 
	les	bx,dword ptr [bp-008h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+008h] 
	jc	@@L34 
	jnz	@@L35 
	cmp	dx,[bp+006h] 
	jc	@@L34 
@@L35:	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push    word ptr [bp-006h] 
	push    word ptr [bp-008h] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	mov	dx,[bp-006h] 
	mov	ax,[bp-008h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L34:	les	bx,dword ptr [bp-008h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
@@L33:	mov	ax,[bp-008h] 
	or	ax,[bp-006h] 
	jnz	@@L36 
	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx],0EDCBh 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	call	far ptr _free 
	add	sp,+004h 
	xor	dx,dx 
	xor	ax,ax 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L17:	mov	dx,[bp-002h] 
	mov	ax,[bp-004h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L15:	xor	dx,dx 
	xor	ax,ax 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_realloc: 
	push	bp 
	mov	bp,sp 
	sub	sp,+008h 
	push	si 
	mov	ax,[bp+00Ah] 
	or	ax,[bp+00Ch] 
	jnz	@@L37 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	call	far ptr FXVMM_API_TEXT:__fxvmm_free 
	add	sp,+004h 
	xor	dx,dx 
	xor	ax,ax 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L37:	mov	ax,[bp+006h] 
	or	ax,[bp+008h] 
	jnz	@@L38 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push	cs 
	call	__fxvmm_alloc 
	add	sp,+004h 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L38:	mov	ax,001Bh 
	push	ax 
	call	far ptr _malloc 
	add	sp,+002h 
	mov	[bp-002h],dx 
	mov	[bp-004h],ax 
	mov	ax,[bp-004h] 
	or	ax,[bp-002h] 
	jnz	@@L39 
	jmp	@@L40 
@@L39:	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx],0FEDCh 
	mov	ax,[bp+006h] 
	or	ax,[bp+008h] 
	jz	@@L41 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+00Ch] 
	jc	@@L41 
	jnz	@@L42 
	cmp	dx,[bp+00Ah] 
	jc	@@L41 
@@L42:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	mov	dx,[bp-006h] 
	mov	ax,[bp-008h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L41:	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx+005h],0000h 
	mov	word ptr es:[bx+003h],0000h 
	xor	si,si 
	jmp	short @@L43 
@@L46:	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	cmp	word ptr [bx+_fxvmm_bufsource],+000h 
	jz	@@L44 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval05] 
	add	sp,+008h 
	or	ax,ax 
	jnz	@@L45 
@@L44:	inc	si 
@@L43:	cmp	si,+004h 
	jl	@@L46 
@@L45:	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+003h] 
	or	ax,es:[bx+005h] 
	jnz	@@L47 
	jmp	@@L48 
@@L47:	les	bx,dword ptr [bp-004h] 
	or	byte ptr es:[bx+002h],80h 
	mov	ax,_fxvmm_firstblk 
	or	ax,_fxvmm_tmpval09 
	jnz	@@L49 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
	mov	_fxvmm_tmpval09,ax 
	mov	_fxvmm_firstblk,dx 
	les	bx,dword ptr [bp-004h] 
	xor	ax,ax 
	xor	dx,dx 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
	les	bx,dword ptr [bp-004h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	jmp	short @@L50 
@@L49:	les	bx,dword ptr [bp-004h] 
	mov	ax,_fxvmm_tmpval02 
	mov	dx,_fxvmm_last 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
	les	bx,dword ptr _fxvmm_last 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx+00Dh],0000h 
	mov	word ptr es:[bx+00Bh],0000h 
	mov	ax,[bp-002h] 
	mov	dx,[bp-004h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L50:	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+00Ch] 
	jnc	@@L51 
	jmp	@@L40 
@@L51:	jnbe	@@L52 
	cmp	dx,[bp+00Ah] 
	jnbe	@@L52 
	jmp	@@L40 
@@L52:	mov	ax,001Bh 
	push	ax 
	call	far ptr _malloc 
	add	sp,+002h 
	mov	[bp-006h],dx 
	mov	[bp-008h],ax 
	mov	ax,[bp-008h] 
	or	ax,[bp-006h] 
	jz	@@L53 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp-006h] 
	push    word ptr [bp-008h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	les	bx,dword ptr [bp-008h] 
	mov	word ptr es:[bx],0FEDCh 
@@L53:	mov	dx,[bp-002h] 
	mov	ax,[bp-004h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
	jmp	@@L40 
@@L48:	mov	ax,_fxvmm_tmpval09 
	mov	dx,_fxvmm_firstblk 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
	jmp	short @@L54 
@@L57:	les	bx,dword ptr [bp-008h] 
	mov	al,es:[bx+002h] 
	mov	cl,07h 
	shr	ax,cl 
	and	ax,0001h 
	or	ax,ax 
	jnz	@@L55 
	les	bx,dword ptr [bp-008h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+00Ch] 
	jc	@@L55 
	jnz	@@L56 
	cmp	dx,[bp+00Ah] 
	jc	@@L55 
@@L56:	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp-006h] 
	push    word ptr [bp-008h] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push	cs 
	call	__fxvmm_splitnode 
	add	sp,+00Ch 
	mov	dx,[bp-006h] 
	mov	ax,[bp-008h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L55:	les	bx,dword ptr [bp-008h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
@@L54:	mov	ax,[bp-008h] 
	or	ax,[bp-006h] 
	jnz	@@L57 
	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx],0EDCBh 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	call	far ptr _free 
	add	sp,+004h 
	xor	dx,dx 
	xor	ax,ax 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
@@L40:	mov	dx,[bp-002h] 
	mov	ax,[bp-004h] 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_free: 
	push	bp 
	mov	bp,sp 
	sub	sp,+004h 
	les	bx,dword ptr [bp+006h] 
	cmp	word ptr es:[bx],0EDCBh 
	jnz	@@L58 
	mov	ax,0FFFFh 
	mov	sp,bp 
	pop	bp 
	retf 
@@L58:	les	bx,dword ptr [bp+006h] 
	cmp	word ptr es:[bx],0FEDCh 
	jz	@@L59 
	mov	ax,0FFFEh 
	mov	sp,bp 
	pop	bp 
	retf 
@@L59:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jnz	@@L60 
	jmp	@@L61 
@@L60:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	al,es:[bx+002h] 
	mov	cl,07h 
	shr	ax,cl 
	and	ax,0001h 
	or	ax,ax 
	jz	@@L62 
	jmp	@@L61 
@@L62:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	les	bx,dword ptr [bp+006h] 
	mov	dl,es:[bx+002h] 
	and	dx,+07Fh 
	cmp	ax,dx 
	jz	@@L63 
	jmp	@@L61 
@@L63:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_xms_handle 
	jnz	@@L64 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	cmp	ax,es:[bx+013h] 
	jz	@@L64 
	jmp	@@L61 
@@L64:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_ems_handle 
	jnz	@@L65 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	cmp	ax,es:[bx+013h] 
	jz	@@L65 
	jmp	@@L61 
@@L65:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_dos_handle 
	jnz	@@L66 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	cmp	ax,es:[bx+015h] 
	jz	@@L67 
	jmp	@@L61 
@@L67:	cmp	dx,es:[bx+013h] 
	jz	@@L66 
	jmp	@@L61 
@@L66:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	cmp	ax,_fxvmm_tmpval02 
	jnz	@@L68 
	cmp	dx,_fxvmm_last 
	jnz	@@L68 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L68:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	cmp	ax,_fxvmm_tmpval09 
	jnz	@@L69 
	cmp	dx,_fxvmm_firstblk 
 
	jnz	@@L69 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	_fxvmm_tmpval09,ax 
	mov	_fxvmm_firstblk,dx 
@@L69:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	les	bx,dword ptr [bp+006h] 
	add	es:[bx+003h],dx 
	adc	es:[bx+005h],ax 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	mov	[bp-002h],ax 
	mov	[bp-004h],dx 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	word ptr es:[bx],0EDCBh 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	les	bx,dword ptr [bp+006h] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jz	@@L70 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
@@L70:	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	call	far ptr _free 
	add	sp,+004h 
@@L61:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Fh] 
	or	ax,es:[bx+011h] 
	jnz	@@L71 
	jmp	@@L72 
@@L71:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	mov	al,es:[bx+002h] 
	mov	cl,07h 
	shr	ax,cl 
	and	ax,0001h 
	or	ax,ax 
	jz	@@L73 
	jmp	@@L72 
@@L73:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	les	bx,dword ptr [bp+006h] 
	mov	dl,es:[bx+002h] 
	and	dx,+07Fh 
	cmp	ax,dx 
	jz	@@L74 
	jmp	@@L72 
@@L74:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_xms_handle 
	jnz	@@L75 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	cmp	ax,es:[bx+013h] 
	jz	@@L75 
	jmp	@@L72 
@@L75:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_ems_handle 
	jnz	@@L76 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	cmp	ax,es:[bx+013h] 
	jz	@@L76 
	jmp	@@L72 
@@L76:	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_dos_handle 
	jnz	@@L77 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	cmp	ax,es:[bx+015h] 
	jz	@@L78 
	jmp	@@L72 
@@L78:	cmp	dx,es:[bx+013h] 
	jz	@@L77 
	jmp	@@L72 
@@L77:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	cmp	ax,_fxvmm_tmpval02 
	jnz	@@L79 
	cmp	dx,_fxvmm_last 
	jnz	@@L79 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L79:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	cmp	ax,_fxvmm_tmpval09 
	jnz	@@L80 
	cmp	dx,_fxvmm_firstblk 
	jnz	@@L80 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	mov	_fxvmm_tmpval09,ax 
	mov	_fxvmm_firstblk,dx 
@@L80:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	add	es:[bx+003h],dx 
	adc	es:[bx+005h],ax 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jz	@@L81 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
@@L81:	les	bx,dword ptr [bp+006h] 
	mov	word ptr es:[bx],0EDCBh 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	call	far ptr _free 
	add	sp,+004h 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	mov	[bp+008h],ax 
	mov	[bp+006h],dx 
@@L72:	les	bx,dword ptr [bp+006h] 
	and	byte ptr es:[bx+002h],7Fh 
	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_vrt_handle 
	jnz	@@L82 
	jmp	@@L83 
@@L82:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+017h] 
	or	ax,es:[bx+019h] 
	jz	@@L84 
	jmp	@@L83 
@@L84:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jz	@@L85 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	les	bx,dword ptr [bp+006h] 
	mov	dl,es:[bx+002h] 
	and	dx,+07Fh 
	cmp	ax,dx 
	jnz	@@L85 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	cmp	ax,es:[bx+015h] 
	jnz	@@L85 
	cmp	dx,es:[bx+013h] 
	jnz	@@L85 
	jmp	@@L83 
@@L85:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	cmp	ax,_fxvmm_tmpval02 
	jnz	@@L86 
	cmp	dx,_fxvmm_last 
	jnz	@@L86 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	mov	_fxvmm_tmpval02,ax 
	mov	_fxvmm_last,dx 
@@L86:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	cmp	ax,_fxvmm_tmpval09 
	jnz	@@L87 
	cmp	dx,_fxvmm_firstblk 
	jnz	@@L87 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	mov	_fxvmm_tmpval09,ax 
	mov	_fxvmm_firstblk,dx 
@@L87:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Fh] 
	or	ax,es:[bx+011h] 
	jz	@@L88 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Fh] 
	mov	es:[bx+00Dh],ax 
	mov	es:[bx+00Bh],dx 
@@L88:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+00Bh] 
	or	ax,es:[bx+00Dh] 
	jz	@@L89 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+011h] 
	mov	dx,es:[bx+00Fh] 
	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+00Bh] 
	mov	es:[bx+011h],ax 
	mov	es:[bx+00Fh],dx 
@@L89:	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval06] 
	add	sp,+004h 
	les	bx,dword ptr [bp+006h] 
	mov	word ptr es:[bx],0EDCBh 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	call	far ptr _free 
	add	sp,+004h 
	xor	ax,ax 
	mov	sp,bp 
	pop	bp 
	retf 
@@L83:	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	_fxvmm_tmpval01,ax 
	mov	_fxvmm_rovblock,dx 
	xor	ax,ax 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_deinitialize: 
	push	bp 
	mov	bp,sp 
	sub	sp,+008h 
	push	si 
	mov	ax,_fxvmm_tmpval09 
	mov	dx,_fxvmm_firstblk 
	mov	[bp-002h],ax 
	mov	[bp-004h],dx 
	jmp	short @@L91 
@@L93:	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+00Dh] 
	mov	dx,es:[bx+00Bh] 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
	les	bx,dword ptr [bp-004h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	cmp	ax,_fxvmm_global_vrt_handle 
	jz	@@L92 
	les	bx,dword ptr [bp-004h] 
	mov	ax,es:[bx+017h] 
	or	ax,es:[bx+019h] 
	jnz	@@L92 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	les	bx,dword ptr [bp-004h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval06] 
	add	sp,+004h 
@@L92:	les	bx,dword ptr [bp-004h] 
	mov	word ptr es:[bx],0EDCBh 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	call	far ptr _free 
	add	sp,+004h 
	mov	ax,[bp-006h] 
	mov	dx,[bp-008h] 
	mov	[bp-002h],ax 
	mov	[bp-004h],dx 
 
@@L91:	mov	ax,[bp-004h] 
	or	ax,[bp-002h] 
	jnz	@@L93 
	xor	si,si 
	jmp	short @@L94 
@@L97:	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	cmp	word ptr [bx+_fxvmm_bufsource],+000h 
	jz	@@L95 
	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmxblock] 
@@L95:	inc	si 
@@L94:	cmp	si,+004h 
	jl	@@L97 
	pop	si 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_absread: 
	push	bp 
	mov	bp,sp 
	mov	ax,[bp+010h] 
	mov	dx,[bp+00Eh] 
	add	dx,[bp+012h] 
	adc	ax,[bp+014h] 
	les	bx,dword ptr [bp+00Ah] 
	cmp	ax,es:[bx+005h] 
	jc	@@L98 
	jnbe	@@L99 
	cmp	dx,es:[bx+003h] 
	jbe	@@L98 
@@L99:	mov	dx,0FFFFh 
	mov	ax,0FFFFh 
	pop	bp 
	retf 
@@L98:	push    word ptr [bp+014h] 
	push    word ptr [bp+012h] 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	les	bx,dword ptr [bp+00Ah] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval07] 
	add	sp,+010h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_read: 
	push	bp 
	mov	bp,sp 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	les	bx,dword ptr [bp+00Ah] 
	push    word ptr es:[bx+009h] 
	push    word ptr es:[bx+007h] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	les	bx,dword ptr [bp+00Ah] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval07] 
	add	sp,+010h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_abswrite: 
	push	bp 
	mov	bp,sp 
	mov	ax,[bp+00Ch] 
	mov	dx,[bp+00Ah] 
	add	dx,[bp+012h] 
	adc	ax,[bp+014h] 
	les	bx,dword ptr [bp+006h] 
	cmp	ax,es:[bx+005h] 
	jc	@@L101 
	jnbe	@@L102 
	cmp	dx,es:[bx+003h] 
	jbe	@@L101 
@@L102:	mov	dx,0FFFFh 
	mov	ax,0FFFFh 
	pop	bp 
	retf 
@@L101:	push    word ptr [bp+014h] 
	push    word ptr [bp+012h] 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval08] 
	add	sp,+010h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_write: 
	push	bp 
	mov	bp,sp 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	les  bx,dword ptr [bp+006h] 
	push    word ptr es:[bx+009h] 
	push    word ptr es:[bx+007h] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
 
	les	bx,dword ptr [bp+006h] 
	mov	al,es:[bx+002h] 
	and	ax,007Fh 
	mov	dx,001Ah 
	imul	dx 
	mov	bx,ax 
	call	dword ptr [bx+_fxvmm_tmpval08] 
	add	sp,+010h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_absmove: 
	push	bp 
	mov	bp,sp 
	sub	sp,+004h 
@@L112:	cmp	word ptr [bp+018h],+000h 
	jnbe	@@L104 
	jc	@@L105 
	cmp	word ptr [bp+016h],0200h 
	jnc	@@L104 
@@L105:	mov	dx,[bp+018h] 
	mov	ax,[bp+016h] 
	jmp	short @@L106 
@@L104:	xor	dx,dx 
	mov	ax,0200h 
@@L106:	mov	[bp-002h],dx 
	mov	[bp-004h],ax 
	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp+014h] 
	push    word ptr [bp+012h] 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	push	ds 
	mov	ax,offset DGROUP:_fxvmm_tmpblock 
	push	ax 
	push	cs 
	call	__fxvmm_absread 
	add	sp,+010h 
	cmp	dx,-001h 
	jnz	@@L108 
	cmp	ax,0FFFFh 
	jnz	@@L108 
	mov	dx,0FFFFh 
	mov	ax,0FFFFh 
	mov	sp,bp 
	pop	bp 
	retf 
@@L108:	push    word ptr [bp-002h] 
	push    word ptr [bp-004h] 
	push	ds 
	mov	ax,offset DGROUP:_fxvmm_tmpblock 
	push	ax 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push	cs 
	call	__fxvmm_abswrite 
	add	sp,+010h 
	cmp	dx,-001h 
	jnz	@@L109 
	cmp	ax,0FFFFh 
	jnz	@@L109 
	mov	dx,0FFFFh 
	mov	ax,0FFFFh 
	mov	sp,bp 
	pop	bp 
	retf 
@@L109:	cmp	word ptr [bp+018h],+000h 
	jnbe	@@L110 
	jnz	@@L111 
	cmp	word ptr [bp+016h],0200h 
	jbe	@@L111 
@@L110:	sub	word ptr [bp+016h],0200h 
	sbb	word ptr [bp+018h],+000h 
	add	word ptr [bp+012h],0200h 
	adc	word ptr [bp+014h],+000h 
	add	word ptr [bp+00Ah],0200h 
	adc	word ptr [bp+00Ch],+000h 
	jmp	@@L112 
@@L111:	les	bx,dword ptr [bp+006h] 
	mov	dx,es:[bx+009h] 
	mov	ax,es:[bx+007h] 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_move: 
	push	bp 
	mov	bp,sp 
	push    word ptr [bp+010h] 
	push    word ptr [bp+00Eh] 
	les	bx,dword ptr [bp+00Ah] 
	push    word ptr es:[bx+009h] 
	push    word ptr es:[bx+007h] 
	push    word ptr [bp+00Ch] 
	push    word ptr [bp+00Ah] 
	les  bx,dword ptr [bp+006h] 
	push    word ptr es:[bx+009h] 
	push    word ptr es:[bx+007h] 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push	cs 
	call	__fxvmm_absmove 
	add	sp,+014h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_setpos: 
	push	bp 
	mov	bp,sp 
	les	bx,dword ptr [bp+006h] 
	cmp	word ptr es:[bx],0FEDCh 
	jz	@@L113 
	mov	ax,0FFFFh 
	pop	bp 
	retf 
@@L113:	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+005h] 
	mov	dx,es:[bx+003h] 
	cmp	ax,[bp+00Ch] 
	jnbe	@@L114 
	jnz	@@L115 
	cmp	dx,[bp+00Ah] 
	jnbe	@@L114 
@@L115:	mov	ax,0FFFEh 
	pop	bp 
	retf 
@@L114:	les	bx,dword ptr [bp+006h] 
	mov	ax,[bp+00Ch] 
	mov	dx,[bp+00Ah] 
	mov	es:[bx+009h],ax 
	mov	es:[bx+007h],dx 
	xor	ax,ax 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_set_strategy: 
	push	bp 
	mov	bp,sp 
	push	si 
	mov	si,[bp+00Ah] 
	cmp	si,+004h 
	jl	@@L116 
	xor	ax,ax 
	pop	si 
	pop	bp 
	retf 
@@L116:	mov	ax,[bp+006h] 
	or	ax,[bp+008h] 
	jnz	@@L117 
	xor	ax,ax 
	pop	si 
	pop	bp 
	retf 
@@L117:	les	bx,dword ptr [bp+006h] 
	les	bx,dword ptr es:[bx+016h] 
	mov	es:[bx],si 
	mov	ax,001Ah 
	push	ax 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	push	ds 
	mov	ax,si 
	mov	dx,001Ah 
	imul	dx 
	add	ax,offset DGROUP:_fxvmm_bufsource 
	push	ax 
	call	far ptr _memcpy 
	add	sp,+00Ah 
	mov	ax,0001h 
	pop	si 
	pop	bp 
	retf 
 
FXVMM_API_TEXT	ENDS 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
_DATA	SEGMENT 
 
_fxvmm_dosalptr	                dd	00000046Ch 
_fxvmm_global_xms_handle	dw	00004h 
_fxvmm_global_ems_handle	dw	00004h 
_fxvmm_global_vrt_handle	dw	00004h 
_fxvmm_global_dos_handle	dw	00004h 
 
_DATA	ENDS 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
_BSS	SEGMENT 
 
_fxvmm_tmpblock	   db	512 dup(?) 
_fxvmm_rovblock	   dw	1   dup(?) 
_fxvmm_tmpval01	   dw	1   dup(?) 
_fxvmm_last	   dw	1   dup(?) 
_fxvmm_tmpval02	   dw	1   dup(?) 
_fxvmm_tmpval03	   dw	1   dup(?) 
_fxvmm_tmpval04	   dw	1   dup(?) 
_fxvmm_bufsource   dw	1   dup(?) 
_fxvmm_tmpval05	   dd	1   dup(?) 
_fxvmm_tmpval06	   dd	1   dup(?) 
_fxvmm_tmpval07    dd	1   dup(?) 
_fxvmm_tmpval08    dd	1   dup(?) 
_fxvmm_tmxblock	   db	86  dup(?) 
_fxvmm_firstblk	   dw	1   dup(?) 
_fxvmm_tmpval09	   dw	1   dup(?) 
_fxvmm_error_code  dw	1   dup(?) 
 
_BSS	ENDS 
	END 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°