You should use the _far* family of functions in sys/farptr.h to access memory. The following function prototypes are from the libc help documentation of djgpp v2.0x.
#include
unsigned char _farpeekb(unsigned short selector, unsigned long offset);
unsigned short _farpeekw(unsigned short selector, unsigned long offset);
unsigned long _farpeekl(unsigned short selector, unsigned long offset);
void _farpokeb(unsigned short sel, unsigned long off, unsigned char val);
void _farpokew(unsigned short sel, unsigned long off, unsigned short val);
void _farpokel(unsigned short sel, unsigned long off, unsigned long val);
void _farsetsel(unsigned short selector);
unsigned short _fargetsel(void);
void _farnspokeb(unsigned long offset, unsigned char value);
void _farnspokew(unsigned long offset, unsigned short value);
void _farnspokel(unsigned long offset, unsigned long value);
unsigned char _farnspeekb(unsigned long offset);
unsigned short _farnspeekw(unsigned long offset);
unsigned long _farnspeekl(unsigned long offset);
Assume the memory address you want to access is:
unsigned long ulAddr = 0x0000a000;
Use _farpokeb(_dos_ds, ulAddr, byte) to write one byte, and use _farpeekb() to read one byte. _dos_ds is a system predefined value, so just use it directly.
If you want to access a continuous memory address range, then you can:
unsigned int i, wLen = 0x1000;
_farsetsel(_dos_ds);
for (i = 0; i < wLen; i++) {
printf("0x%02hX\t", _farnpeekb(ulAddr + i);
}
ps: I suggest you read the djgpp faq carefully. If you asked this kind of question on the djgpp mailing list, they would only answer you with faq 10.2 or 18.x.