rdos/kernel/far.asm

47 lines
707 B
NASM

; reset segments
rstseg mov ax, cs
mov ds, ax
mov es, ax
ret
; copy to far memory
; IN es:bx far memory ptr (preserved)
; ds:dx local ptr (preserved)
; cx number of bytes to transfer
; OUT cx set to zero
; si & di trashed
stofar mov si, dx
mov di, bx
rep movsb
ret
; copy from far memory
; IN es:bx far memory ptr (preserved)
; ds:dx local ptr (preserved)
; cx number of bytes to copy
; OUT cx set to zero
; si & di trashed
lodfar call xchgdes
mov si, bx
mov di, dx
rep movsb
; exchange es and ds
xchgdes push ds
push es
pop ds
pop es
ret
; normalize ptr in ds:dx
norm mov ax, ds
mov cl, 4
push dx
ror dx, cl
and dh, 0xF
add ax, dx
mov ds, ax
pop dx
and dx, 0xF
ret