Date: Fri, 1 Sep 95 14:39 MDT From: mat AT ardi DOT com (Mat Hostetter) To: djgpp AT sun DOT soe DOT clarkson DOT edu Subject: Re: Graphics in v2.0 Newsgroups: comp.os.msdos.djgpp References: <420l92$f04 AT bug DOT rahul DOT net> <427g3j$5n0 AT krel DOT iea DOT com> >>>>> "Brainfried" == Brainfried writes: >> I don't do any of that, for both 1.6 and 2.0 I've used: char * >> screen >> >> screen=(char*)0xa0000; >> >> screen[x+y*320]=somecolor; >> >> As long as I set stuff up with a INT 10 call it works fine, no >> need to muck with this near/far pointer crapola. *bleh* This is >> GCC after all, not DOS. :) Brainfried> How do you get this to work? Every time I try to do Brainfried> this I get a GPF! Right, the technique described won't work under djgpp. Brainfried> Here is the code for the simple test program I use (It Brainfried> doesn't work), am I doing something wrong? The flaw is with the original poster's erroneous claim, not your interpretation of it. You can't simply copy to 0xA0000 and expect it to appear on the screen. However, since you asked, your program also has two problems: 1) Your asm clobbers %ax without telling gcc about it. Assuming int 10h preserves all registers, I'd write it like this: asm ("int $0x10" : : "a" (0x0013)); 2) You use `strcpy' to copy a range of memory which is not 0-terminated. The strcpy will just run off the end of the array and probably hit a zero somewhere, but who knows where the copy will stop. Use 'memcpy' to copy a given number of bytes. Use `movedata' or `dosmemput' to write to the 0xA0000 frame buffer. It would be good if you could provide an email address (at iea.com?) so people like me don't need to clutter up the newsgroup with suggestions like this which are probably only of interest to you. -Mat