Solved

Drawing in VGA using Visual C++ 5.0

Posted on 1998-09-14
3
345 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
  • 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

This article shows how to make a Windows 7 gadget that extends its U/I with a flyout panel -- a window that pops out next to the gadget.  The example gadget shows several additional techniques:  How to automatically resize a gadget or flyout panel t…
This article describes how to programmatically preset the "Pages per Sheet" option that's available with most printer drivers.   This setting lets you do "n-Up" printing, where two, four, or more pages are printed on each sheet of paper. If your …
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…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…

911 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now