• C

Writing to VDU memory

Why my program coding is ineffective to display the characters on the screen using VDU memory?

The coding is given as below:

/* printing the integers stored in an array */
#include<stdio.h>
#include<conio.h>

void main()
{
 int i;
 clrscr();
 char far *video;
 *video=0xB8000000;  /* for VGA/EGA/CGA type */
 int k, array[4]={ 1,2,3,4 };
 for(i=0,k=0; k<=4; i+=2,k++)
 {
  *(video+i)=array[k];  /* adding text */
  *(video+i+1)=65;  /* adding attributes (colors) */
 }
getch();
}

Please help!


LVL 1
gagandeep_1984Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

grg99Commented:
This will noly work if you're using a compiler that generates 16-bit code.

What compiler and memory model are you using?

0
dhyaneshCommented:
hi

a few errors in your code

/* printing the integers stored in an array */
#include<stdio.h>
#include<conio.h>

void main()
{
int i;
clrscr();
char far *video;
video=0xB8000000;  /* for VGA/EGA/CGA type */        //it should be video and not *video
int k, array[4]={ 1,2,3,4 };
for(i=0,k=0; k<=4; i+=2,k++)
{
 *(video+i)=array[k] + '0';  /* adding text */               //Here ascii value of zero is added to print correctly
 *(video+i+1)=65;  /* adding attributes (colors) */
}
getch();
}

Dhyanesh
0
gagandeep_1984Author Commented:
Dear grg99,

 Sorry, but I have a very less knowledge about memory model but the complier, which I  am using is the " Turbo-c 3.0" .

0
ON-DEMAND: 10 Easy Ways to Lose a Password

Learn about the methods that hackers use to lift real, working credentials from even the most security-savvy employees in this on-demand webinar. We cover the importance of multi-factor authentication and how these solutions can better protect your business!

dhyaneshCommented:
The program modified by me works fine under Turbo-c 3.0
0
gagandeep_1984Author Commented:
Dear Dhyanesh,

Sorry for the late response.
According to your coding, I compiled the program but it shows an error " Cannot convert ' unsigned long' to 'char far' " at that point where you were insisting to remove the pointer from the statement ( video=0xB8000000; ) . But when the pointer is used in that statement, the concerned error vanish. After compiling the program, I see nothing on screen . Am I doing something wrong?
Please help!

Gagan...
0
dhyaneshCommented:
hi

It works fine on my compiler. You can try to cast type it like

video = (char far *)0xB8000000L;

It has to be video and not *video. This is because *video will store 0xB8000000 at a location pointed by video.

However if 'video' is used then the statement makes 'video' point to location 0xB000000 which is starting location for VDU memory.

Dhyanesh
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
gagandeep_1984Author Commented:
Dear Dhyanesh ,
Thank you for your help to make this program a success.
The statement which you have given stated as " video=(char far *) B8000000; "  makes the program works fine.
But why does it gives a background of RED color?  and also the value B0000000 given by you runs under monochorme  video mode but mine is VGA mode.
0
dhyaneshCommented:
hi

Sorry about the value B000000 it was a typing mistake. The value should be 0xB8000000.

Also if you want the text in red change following statement.

*(video+i+1)=RED;  /* adding attributes (colors) */

Dhyanesh
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.