Mail Archives: djgpp/1997/09/02/23:01:00
At 09:41 9/2/1997 GMT, Daniel Skrobo wrote:
>Ok, here it is :
> I need source code for fliping allocated memory (using MALLOC) to VGA
> MEM. The code should be in pure djgpp inline ASM ("A&T"). But, if that
> can be done differently then please send your ideas anyway.!
dosmemput() should work fine for this. If you're always going to move even
multiples of 4 bytes you can use dosmemputl(). If you insist, however, my
attempt at writing it in inline asm follows. Please note, however:
- I don't use inline ASM much at all, so this is probably not the best or
most elegant way to do this. It does, however, generate the right code (as
far as I can tell) and should work.
- It assumes that `len' is an even multiple of 4. If you're always moving an
entire screen-full, that shouldn't be a problem. In fact, in that case, you
can optimize by removing the `offset' argument entirely. If not, you may be
better off using `dosmemput'
--cut--
#include <go32.h>
void move_to_screen(void *buf, unsigned len, unsigned offset)
{
asm("pushw %%es\n\
movw %w0,%%es\n\
rep \n\
movsl\n\
popw %%es\n"
:
: "rm" ((unsigned short)_dos_ds),
"c" (len / 4), "S" (buf), "D" (0xA0000 + offset)
: "%ecx", "%esi", "%edi");
}
--cut--
You can make this a macro if you so desire, too.
HTH
Nate Eldredge
eldredge AT ap DOT net
- Raw text -