brender-1997/host/realmem.asm

221 lines
3.9 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: realmem.asm 2.1 1995/11/29 14:13:41 sam Exp $
;; $Locker: $
;;
;; Support routines for accessing real memory
;;
.386p
.model flat,c
.data
extern _RealSelector:word
.code
; void BR_RESIDENT_ENTRY HostRealBlockWrite(short offset, short seg, char *block, int count);
;
HostRealBlockWrite proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
mov es,_RealSelector
mov edi,p_seg
shl edi,4
add edi,p_off
mov esi,block
mov ecx,count
shr ecx,1
rep movsw
adc ecx,ecx
rep movsb
ret
HostRealBlockWrite endp
; void BR_RESIDENT_ENTRY HostRealBlockFill(short offset, short seg, unsigned byte value, int count);
;
HostRealBlockFill proc uses es esi edi, p_off:dword, p_seg:dword, value:dword, count:dword
mov es,_RealSelector
mov edi,p_seg
shl edi,4
add edi,p_off
mov al,byte ptr value
mov ecx,count
mov ah,al
shr ecx,1
rep stosw
adc ecx,ecx
rep stosb
ret
HostRealBlockFill endp
; void BR_RESIDENT_ENTRY HostRealBlockRead(short offset, short seg, char *block, int count);
;
HostRealBlockRead proc uses ds esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
mov ds,_RealSelector
mov esi,p_seg
shl esi,4
add esi,p_off
mov edi,block
mov ecx,count
shr ecx,1
rep movsw
adc ecx,ecx
rep movsb
ret
HostRealBlockRead endp
; int BR_RESIDENT_ENTRY HostRealStringWrite(short offset, short seg, char *block, int max);
;
HostRealStringWrite proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
mov es,_RealSelector
mov edi,p_seg
shl edi,4
add edi,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
HostRealStringWrite endp
; int BR_RESIDENT_ENTRY HostRealStringRead(short offset, short seg, char *block, int max);
;
HostRealStringRead proc uses es esi edi, p_off:dword, p_seg:dword, block:dword, count:dword
mov es,_RealSelector
mov edi,p_seg
shl edi,4
add edi,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
HostRealStringRead endp
; void BR_RESIDENT_ENTRY HostRealByteWrite(short offset, short seg, char value);
;
HostRealByteWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
mov ds,_RealSelector
mov edx,p_seg
shl edx,4
add edx,p_off
mov al,byte ptr value
mov [edx],al
ret
HostRealByteWrite endp
; unsigned char BR_RESIDENT_ENTRY HostRealByteRead(short offset, short seg);
;
HostRealByteRead proc uses ds, p_off:dword, p_seg:dword
mov ds,_RealSelector
mov eax,p_seg
shl eax,4
add eax,p_off
mov al,[eax]
ret
HostRealByteRead endp
; void BR_RESIDENT_ENTRY HostRealWordWrite(short offset, short seg, unsigned short value);
;
HostRealWordWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
mov ds,_RealSelector
mov edx,p_seg
shl edx,4
add edx,p_off
mov ax,word ptr value
mov [edx],ax
ret
HostRealWordWrite endp
; unsigned short BR_RESIDENT_ENTRY HostRealWordRead(short offset, short seg);
;
HostRealWordRead proc uses ds, p_off:dword, p_seg:dword
mov ds,_RealSelector
mov eax,p_seg
shl eax,4
add eax,p_off
mov ax,[eax]
ret
HostRealWordRead endp
; void BR_RESIDENT_ENTRY HostRealDWordWrite(short offset, short seg, unsigned long value);
;
HostRealDWordWrite proc uses ds, p_off:dword, p_seg:dword, value:dword
mov ds,_RealSelector
mov edx,p_seg
shl edx,4
add edx,p_off
mov eax,value
mov [edx],eax
ret
HostRealDWordWrite endp
; unsigned long BR_RESIDENT_ENTRY HostRealDWordRead(short offset, short seg);
;
HostRealDWordRead proc uses ds, p_off:dword, p_seg:dword
mov ds,_RealSelector
mov edx,p_seg
shl edx,4
add edx,p_off
mov eax,p_seg
shl eax,4
add eax,p_off
mov eax,[eax]
ret
HostRealDWordRead endp
end