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


;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
; 
; Conventional memory manipulation procedures 
; 
	TITLE	FXDOS 
	.386p 
	.387 
 
FXDOS_TEXT	SEGMENT	BYTE public USE16 'CODE' 
FXDOS_TEXT	ENDS 
 
_DATA	SEGMENT	WORD public USE16 'DATA' 
_DATA	ENDS 
_BSS	SEGMENT	WORD public USE16 'BSS' 
_BSS	ENDS 
DGROUP	GROUP	_DATA, _BSS 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
include ..\source.asm\_fxvmm.inc 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
	extrn		_movedata:NEAR 
	extrn		_farfree:NEAR 
	extrn		_farmalloc:NEAR 
	extrn		_fxvmm_global_dos_handle:WORD 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
	public		__fxvmm_dos_handle_init 
	public		__fxvmm_dos_handle_absread 
	public		__fxvmm_dos_handle_abswrite 
	public		__fxvmm_dos_handle_free 
	public		__fxvmm_dos_handle_alloc 
	public		__fxvmm_dos_handle_deinit 
 
	public		 _fxvmm_local_dos_handle 
	public		 _fxvmm_strat_dos_handle 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
FXDOS_TEXT	SEGMENT 
	assume	cs: FXDOS_TEXT 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_init: 
	push	bp 
	mov	bp,sp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_absread: 
	push	bp 
	mov	bp,sp 
	sub	sp,+00Ch 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	les	bx,dword ptr [bp+00Ah] 
	add	dx,es:[bx+017h] 
	add	dx,[bp+00Eh] 
	mov	[bp-002h],ax 
	mov	[bp-004h],dx 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
@@L6:	cmp	word ptr [bp+014h],+000h 
	jnbe	@@L1 
	jc	@@L2 
	cmp	word ptr [bp+012h],-001h 
	jnc	@@L1 
@@L2:	mov	dx,[bp+014h] 
	mov	ax,[bp+012h] 
	jmp	short @@L3 
@@L1:	xor	dx,dx 
	mov	ax,0FFFFh 
@@L3:	mov	[bp-00Ah],dx 
	mov	[bp-00Ch],ax 
	push    word ptr [bp-00Ch] 
	push    word ptr [bp-008h] 
	push    word ptr [bp-006h] 
	push    word ptr [bp-004h] 
	push    word ptr [bp-002h] 
	call	far ptr _movedata 
	add	sp,+00Ah 
	cmp	word ptr [bp-00Ah],+000h 
	jg	@@L4 
	jl	@@L5 
	cmp	word ptr [bp-00Ch],-001h 
	jc	@@L5 
@@L4:	sub	word ptr [bp+012h],-001h 
	sbb	word ptr [bp+014h],+000h 
	jmp	short @@L6 
@@L5:	mov	ax,[bp+010h] 
	mov	dx,[bp+00Eh] 
	add	dx,[bp+012h] 
	adc	ax,[bp+014h] 
	les	bx,dword ptr [bp+00Ah] 
	push	dx 
	mov	es:[bx+009h],ax 
	mov	dx,ax 
	pop	ax 
	mov	es:[bx+007h],ax 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_abswrite: 
	push	bp 
	mov	bp,sp 
	sub	sp,+00Ch 
	les	bx,dword ptr [bp+006h] 
	mov	ax,es:[bx+015h] 
	mov	dx,es:[bx+013h] 
	les	bx,dword ptr [bp+006h] 
	add	dx,es:[bx+017h] 
	add	dx,[bp+00Ah] 
	mov	[bp-002h],ax 
	mov	[bp-004h],dx 
	mov	ax,[bp+010h] 
	mov	dx,[bp+00Eh] 
	mov	[bp-006h],ax 
	mov	[bp-008h],dx 
@@L12:	cmp	word ptr [bp+014h],+000h 
	jnbe	@@L7 
	jc	@@L8 
	cmp	word ptr [bp+012h],-001h 
	jnc	@@L7 
@@L8:	mov	dx,[bp+014h] 
	mov	ax,[bp+012h] 
	jmp	short @@L9 
@@L7:	xor	dx,dx 
	mov	ax,0FFFFh 
@@L9:	mov	[bp-00Ah],dx 
	mov	[bp-00Ch],ax 
	push    word ptr [bp-00Ch] 
	push    word ptr [bp-004h] 
	push    word ptr [bp-002h] 
	push    word ptr [bp-008h] 
	push    word ptr [bp-006h] 
	call	far ptr _movedata 
	add	sp,+00Ah 
	cmp	word ptr [bp-00Ah],+000h 
	jg	@@L10 
	jl	@@L11 
	cmp	word ptr [bp-00Ch],-001h 
	jc	@@L11 
@@L10:	sub	word ptr [bp+012h],-001h 
	sbb	word ptr [bp+014h],+000h 
	jmp	short @@L12 
@@L11:	mov	ax,[bp+00Ch] 
	mov	dx,[bp+00Ah] 
	add	dx,[bp+012h] 
	adc	ax,[bp+014h] 
	les	bx,dword ptr [bp+006h] 
	push	dx 
	mov	es:[bx+009h],ax 
	mov	dx,ax 
	pop	ax 
	mov	es:[bx+007h],ax 
	mov	sp,bp 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_free: 
	push	bp 
	mov	bp,sp 
	les	bx,dword ptr [bp+006h] 
	push    word ptr es:[bx+015h] 
	push    word ptr es:[bx+013h] 
	call	far ptr _farfree 
	add	sp,+004h 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_alloc: 
	push	bp 
	mov	bp,sp 
	push    word ptr [bp+008h] 
	push    word ptr [bp+006h] 
	call	far ptr _farmalloc 
	add	sp,+004h 
	les	bx,dword ptr [bp+00Ah] 
	mov	es:[bx+015h],dx 
	mov	es:[bx+013h],ax 
	or	ax,dx 
	jnz	@@L13 
	les	bx,dword ptr [bp+00Ah] 
	mov	word ptr es:[bx+019h],0000h 
	mov	word ptr es:[bx+017h],0000h 
	assume	ds: DGROUP 
	mov	ax,_fxvmm_global_dos_handle 
	and	ax,007Fh 
	les	bx,dword ptr [bp+00Ah] 
	and	byte ptr es:[bx+002h],80h 
	or	es:[bx+002h],al 
	les	bx,dword ptr [bp+00Ah] 
	mov	word ptr es:[bx+009h],0000h 
	mov	word ptr es:[bx+007h],0000h 
	les	bx,dword ptr [bp+00Ah] 
	mov	ax,[bp+008h] 
	mov	dx,[bp+006h] 
	mov	es:[bx+005h],ax 
	mov	es:[bx+003h],dx 
	mov	ax,0001h 
	pop	bp 
	retf 
@@L13:	xor	ax,ax 
	pop	bp 
	retf 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
__fxvmm_dos_handle_deinit: 
	push	bp 
	mov	bp,sp 
	pop	bp 
	retf 
FXDOS_TEXT	ENDS 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°± 
 
_DATA	SEGMENT 
 
_fxvmm_local_dos_handle	db	001h 
	                db	000h 
	                dd	FXDOS_TEXT:__fxvmm_dos_handle_alloc 
	                dd	FXDOS_TEXT:__fxvmm_dos_handle_free 
	                dd	FXDOS_TEXT:__fxvmm_dos_handle_absread 
	                dd	FXDOS_TEXT:__fxvmm_dos_handle_abswrite 
	                dd	FXDOS_TEXT:__fxvmm_dos_handle_deinit 
	                dd	DGROUP:_fxvmm_global_dos_handle 
 
_fxvmm_strat_dos_handle	dd	DGROUP:_fxvmm_local_dos_handle 
 
_DATA	ENDS 
	END 
 
;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°