Mail Archives: djgpp/1994/08/07/09:42:45
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 -