Far pointers in VC 5-6.0

Far pointers in VC 5-6.0

I was trying to do some direct memory stuff (writing to the DOS console buffer or a graphics screen) using my Visual C++ compiler. Unfortunately, the compiler is telling me that “far is an obsolete keyword.” What is the solution to get to absolute memory addresses outside of the data segment? For example:

char far * videobuffer = 0xA0000000;

Sorry, in 32-bit Windows all addresses are protected and do not represent the location of physical memory. When you access data through a pointer, the processor looks up information on the current segment selector to determine exactly where the memory is located.

In addition, the designers of 32-bit Windows do not want your programs accessing any old address you want. It is this design that allows multiple programs to run at the same time without disturbing each other, even when one of those programs goes awry (at least, most of the time anyway).

Of course, it is possible. But it requires writing a device driver. I don’t have all the details but only device drivers (I believe through special segment selectors) have the priviledge to access absolute memory addresses.

Once you are into Win32, you need to start looking for other ways to interact with the display.


Share the Post: