Mail Archives: djgpp/1998/12/19/09:30:26
From: | "Max Erhard" <erhard AT banstead DOT u-net DOT com>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | beginner mode13 question
|
Lines: | 69
|
X-Newsreader: | Microsoft Outlook Express 4.72.3110.1
|
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3
|
Message-ID: | <dMOe2.122$14.362@newsr2.u-net.net>
|
Date: | Sat, 19 Dec 1998 14:29:22 -0000
|
NNTP-Posting-Host: | 194.119.176.183
|
X-Complaints-To: | news AT u-net DOT net
|
X-Trace: | newsr2.u-net.net 914077833 194.119.176.183 (Sat, 19 Dec 1998 14:30:33 BST)
|
NNTP-Posting-Date: | Sat, 19 Dec 1998 14:30:33 BST
|
Organization: | (Posted via) U-NET Internet Ltd.
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
I am having trouble getting mode13 programs to work. Plotting pixels using
bios interupts works OK. But as soon as I try to directly address the video
memory, I start to get horrible GPFs. I have tried A000, A0000 and A0000000
as the address for video memory but no luck. I have read about special
commands for near pointers or something but they need <sys/nearptr.h> and I
do not have this file in my /include/sys folder, only farptr.h. Also is
there a memory model setting for gcc that I need to know about.
Errors look like this:-
General Protection Fault at eip=211
eax=00000001 ebx=00051d00 ecx=000a0141 edx=000a0141 esi=00000000
edi=00000000
ebp=00051d50 esp=00051d4c cs=bf ds=b7 es=b7 fs=b7 gs=b7 ss=c7 cr2=00001fec
Call frame traceback EIPs:
0x00000211
0x00000285
My code is:- (which should make a rainbow of all of the 256 colours on
screen.)
#include <stdio.h>
#include <bios.h>
#include <dos.h>
int a;
int dx;
int dy;
unsigned char *VGA=(unsigned char *)0xA0000L;
void set_mode13()
{
union REGS regs;
regs.h.ah = 0x00;
regs.h.al = 0x13;
int86(0x10,®s,®s);
}
void set_textmode()
{
union REGS regs;
regs.h.ah = 0x00;
regs.h.al = 0x03;
int86(0x10,®s,®s);
}
void plot_pixel(int x, int y, int colour)
{
VGA[y*320+x]=colour;
}
void main ()
{
set_mode13();
for(a=0;a<=256;a+1)
{
for(dx=1;dx<=320;dx++)
{
for(dy=1;dy<=200;dy++)
{
plot_pixel(dx,dy,a);
}
}
}
set_textmode();
}
- Raw text -