From: brennan AT mack DOT rt66 DOT com (Brennan "The Rev. Bas" Underwood) Newsgroups: comp.os.msdos.djgpp Subject: Re: Far Pointers in Protected Mode Date: 20 Oct 1996 19:00:22 -0600 Organization: Rasterfari Lines: 48 Message-ID: <54ehv6$o4s@mack.rt66.com> References: <54bsg5$c6b AT news DOT stealth DOT net> NNTP-Posting-Host: mack.rt66.com To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Mohan Khurana (mohan AT stealth DOT net) wrote: : Lets say I wanted to fill an area of the screen. Under something like : Borland C, I would just use : : memset(0xA000, 15, 0xffff) : : right? : : This doesn't seem to work in DJGPP. I was thinking about setting each : pixel individually in a for loop using _farnspokeb, but this is slow. : Is there a better way? I want to set chunks of data to a certain : value. I checked farptr.h, but there wasn't really much documentation : in the file. I also checked the info documentation and the : information about far pointers, but the information on the individual : functions wasn't very helpful. If you don't mind using near pointers, you could snag the rep_stosl asm macro from http://brennan.home.ml.org/djgpp/djgpp_asm.html. It would also be trivial to modify it to set %es, farptr style. Hell, I'll do that right now: #define rep_stosl(value, dest, numwords, seg) \ __asm__ __volatile__ ( \ "pushw %%es\n\t" \ "movw %%bx, %%es\n\t" \ "cld\n\t" \ "rep\n\t" \ "stosl\n\t" \ "popw %%es" : : "a" (value), "D" (dest), "c" (numwords), "b" (seg) \ : "%ecx", "%edi" ) Notice you must fill it a 4-byte longword at a time. You would call it like this: rep_stosl(0, 0xa0000, 320*200/4, _dos_ds); to clear a mode 0x13 VGA screen. I'm pretty sure that'll work, but caveat emptor. --Brennan -- brennan AT rt66 DOT com | Personal Goal #67: Drag Carmack and win. | Rasterfarian |