brender-1997/host/farmem.asm

170 lines
3.3 KiB
NASM
Raw Normal View History

2022-05-03 16:30:35 -05:00
;; Copyright (c) 1992,1993-1995 Argonaut Technologies Limited. All rights reserved.
;;
;; $Id: farmem.asm 2.2 1995/11/29 14:12:59 sam Exp $
;; $Locker: $
;;
;; Support routines for accessing far memory
;;
.386p
.model flat,c
.code
; void BR_RESIDENT_ENTRY HostFarBlockWrite(int offset, short seg, char *block, int count);
;
HostFarBlockWrite proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
les edi,fword ptr p_off
mov esi,block
mov ecx,count
shr ecx,1
rep movsw
adc ecx,ecx
rep movsb
ret
HostFarBlockWrite endp
; void BR_RESIDENT_ENTRY HostFarBlockFill(int offset, short seg, unsigned byte value, int count);
;
HostFarBlockFill proc uses es esi edi, p_off:dword, p_seg:dword, value:dword, count:dword
les edi,fword ptr p_off
mov al,byte ptr value
mov ecx,count
mov ah,al
shr ecx,1
rep stosw
adc ecx,ecx
rep stosb
ret
HostFarBlockFill endp
; void BR_RESIDENT_ENTRY HostFarBlockRead(int offset, short seg, char *block, int count);
;
HostFarBlockRead proc uses ds esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
lds esi,fword ptr p_off
mov edi,block
mov ecx,count
shr ecx,1
rep movsw
adc ecx,ecx
rep movsb
ret
HostFarBlockRead endp
; int BR_RESIDENT_ENTRY HostFarStringWrite(int offset, short seg, char *block, int max);
;
HostFarStringWrite proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
les edi,fword ptr p_off
mov esi,block
mov ecx,count
xor eax,eax
and ecx,ecx
je exit
lp: mov dl,[esi]
mov es:[edi],dl
inc eax
and dl,dl
je exit
inc esi
inc edi
dec ecx
jne lp
mov byte ptr es:[edi-1],0
exit:
ret
HostFarStringWrite endp
; int BR_RESIDENT_ENTRY HostFarStringRead(int offset, short seg, char *block, int max);
;
HostFarStringRead proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
les edi,fword ptr p_off
mov esi,block
mov ecx,count
xor eax,eax
and ecx,ecx
je exit
lp:
mov dl,es:[edi]
mov [esi],dl
inc eax
and dl,dl
je exit
inc esi
inc edi
dec ecx
jne lp
mov byte ptr [esi-1],0
exit:
ret
HostFarStringRead endp
; void BR_RESIDENT_ENTRY HostFarByteWrite(int offset, short seg, char value);
;
HostFarByteWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
lds edx,fword ptr p_off
mov al,byte ptr value
mov [edx],al
ret
HostFarByteWrite endp
; unsigned char BR_RESIDENT_ENTRY HostFarByteRead(int offset, short seg);
;
HostFarByteRead proc uses ds, p_off:dword, p_seg:dword
lds eax,fword ptr p_off
mov al,[eax]
ret
HostFarByteRead endp
; void BR_RESIDENT_ENTRY HostFarWordWrite(int offset, short seg, unsigned short value);
;
HostFarWordWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
lds edx,fword ptr p_off
mov ax,word ptr value
mov [edx],ax
ret
HostFarWordWrite endp
; unsigned short BR_RESIDENT_ENTRY HostFarWordRead(int offset, short seg);
;
HostFarWordRead proc uses ds, p_off:dword, p_seg:dword
lds eax,fword ptr p_off
mov ax,[eax]
ret
HostFarWordRead endp
; void BR_RESIDENT_ENTRY HostFarDWordWrite(int offset, short seg, unsigned long value);
;
HostFarDWordWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
lds edx,fword ptr p_off
mov eax,value
mov [edx],eax
ret
HostFarDWordWrite endp
; unsigned long BR_RESIDENT_ENTRY HostFarDWordRead(int offset, short seg);
;
HostFarDWordRead proc uses ds, p_off:dword, p_seg:dword
lds eax,fword ptr p_off
mov eax,[eax]
ret
HostFarDWordRead endp
end