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 ;±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°±°