www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1994/08/07/09:42:45

To: djgpp AT sun DOT soe DOT clarkson DOT edu
Subject: Re: movedata() vs dosmemxxx()
Date: Sun, 07 Aug 94 15:37:48 +0300
From: eliz AT is DOT elta DOT co DOT il

I have a follow-up on this subject.  It seems the problem is that
linear_address_of_transfer_buffer has 0xe in its upper 4 bits,
so the argument passed to movedata() must be AND'ed with 0x0fffffff.
dosmemxxx() do this automagically, as libsrc/dosmem.s clearly shows.
Doing the above before calling movedata() solved the problem in the
example program I posted.

I guess, movedata() doesn't do the above AND automatically because
it is suited for moving protected mode (i.e., 32-bit addressed)
buffers too, am I right?  Another question is: why does the address
of transfer buffer has those bits set?  And, finally, a suggestion:
put this ANDing requirement in the docs (that's assuming this indeed
is the solution to the puzzle).

	Eli Zaretskii

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019