Mail Archives: djgpp/1995/09/01/17:17:26
>>>>> "Brainfried" == Brainfried <unlisted AT email DOT adress> 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
- Raw text -