Mail Archives: djgpp/1994/05/05/18:21:50
> I am using both C (djgpp) and Ada (djgpp port of DOS), and want to have
> Ada or C code directly reference the PC character mode video memory,
> normally at something like address 0xb8000.
The only portable way is to use dosmemget/dosmemput or the Screen
*functions* in <pc.h>.
> When running under GO32, the documentation says the first 1M memory is
> mapped 1:1, so it would appear that it would be possible to reference
> 0xb8000 directly, but this causes a GP protection. Further
Mapped 1:1, but not at offset zero. It is mapped at 0xe0000000.
> documentation mentions that this area is (re?)mapped to 0xe00b8000, and
> in fact, this address (0xe00b8000) works fine.
But not in DPMI mode.
> However, neither 0xe00b8000 nor 0xb8000 work when running the same
> program in a DOS box under windows 3.11. I notice that some library
> routines use dosmemput, dosmemget, or movedata, which I suspect switch
> modes before accessing the "dos" memory. However, I want to directly
Actually, they use a different segment register to access the DOS
memory area. They do not switch to real mode.
> Is there a way for a djgpp-compiled C or GNAT-compiled Ada program to
> directly access video memory in both native DOS AND also in a Windows
> DOS box? Even a solution that required a different video memory address
> in the two cases is acceptable, as long as the program can dynamically
> determine the correct video address based on its operating
> environment.
Always use the functions and not the pointer.
- Raw text -