Solved

Drawing in VGA using Visual C++ 5.0

Posted on 1998-09-14
3
352 Views
Last Modified: 2013-12-03
Hello,

I'm writing a small library that is supposed to write to a VGA graphic card. I need to test this library with visualC++.

I know how to program VGA mode 18 using registers.
But I don't know how to switch the screen into VGA mode.
I have a borland sample program that is doing it the following way:

#define int10 0x10

union REGS regs;
regs.h.ah = 0;
regs.h.al = (char)18;
int86( int10,&regs,&regs);

Great but I can't find REGS and int86 in Visual C++.

I know the screen is at 0xA0000000;
And color register is set by
outportb( 0x3C4, 2 );
outportb( 0x3C5, color ); /* one of 0..15 (15 = black) */

Bit mask is set by
outportb( 0x3CE, 8 );
outportb( 0x3CF, mask );

Writing into screen memory requires reading the byte first because a latch reset required. (that's what I was told).
Then one can write bits into screen memory.

I would like to be able to try this from Visual C++ 5.0.

I know it is crazy to try drawing into VGA that way but apparently some crazy computer science teacher beleive it is  still extreamly important to know how to do so.

Any help would be welcome.

0
Comment
Question by:meessen
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
3 Comments
 
LVL 22

Accepted Solution

by:
nietod earned 50 total points
ID: 1414438
visual C++ only produces 32 bit windows programs.  A 32 bit windows program cannot access the VGA card (or any other hardware).  If you want to do this from windows, you will have to write a device driver.  (Or use a compiler that produces either DOS or 16 bit windows programs--but I wouldn't recomend doing this from a 16 bit windows program anyways.)
0
 
LVL 22

Expert Comment

by:nietod
ID: 1414439
Those functions are all fancy C++ interfaces for x86 assembly language instructions.  Given a C++ compiler that produces 16 bit code, you can use inline asssembly to perform the same steps, like

regs.h.ah = 0;
regs.h.al = (char)18;
int86( int10,&regs,&regs);

becomes

__asm
{
   MOV AH,0
   MOV AL,18
   INT 10
}

and

outportb( 0x3C4, 2 );
outportb( 0x3C5, color ); /* one of 0..15 (15 = black) */

becomes

__asm
{
   MOV DX,3C4H
   MOV AL,2
   OUT DX,AL
   MOV DX,3C5H
   MOV AL,color
   OUT DX,AL
}
0
 
LVL 22

Expert Comment

by:nietod
ID: 1414440
Note, you can use the above assembly in VC 5, right now (it will compile).  But when your program tries to perform those commands (INT 10 or OUT) windows will detect it and terminate the program with an access violation.
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article surveys and compares options for encoding and decoding base64 data.  It includes source code in C++ as well as examples of how to use standard Windows API functions for these tasks. We'll look at the algorithms — how encoding and decodi…
With most software applications trying to cater to multiple user needs nowadays, the focus is to make them as configurable as possible. For e.g., when creating Silverlight applications which will connect to WCF services, the service end point usuall…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question