delorie.com/archives/browse.cgi   search  
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,&regs,&regs);
}

void set_textmode()
{
 union REGS regs;
 regs.h.ah = 0x00;
 regs.h.al = 0x03;
 int86(0x10,&regs,&regs);
}

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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019