From: tdu AT enter DOT net (Tim Updegrove) Newsgroups: comp.os.msdos.djgpp Subject: Physical to Linear fails in MS-DOS Date: Sat, 16 Oct 1999 01:57:32 GMT Message-ID: <3807d8ac.134142@news.enter.net> X-Newsreader: Forte Free Agent 1.11/32.235 NNTP-Posting-Host: 207.16.152.26 X-Original-NNTP-Posting-Host: 207.16.152.26 X-Trace: 15 Oct 1999 22:01:22 -0400, 207.16.152.26 Organization: Enter.Net Lines: 45 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com I've been very pleased with DJGPP and the support in this group. Here is my current problem. The following sample program runs fine in a MS-DOS box in Windows95/98 but the call to __dpmi_physical_address_mapping fails under MS-DOS using cwsdpmi.exe. I have written other programs which use this same function under MS-DOS okay. The difference is that, in the failing case, DOS memory has been allocated and in the working case (code not shown) a physical address is used in the mem_info structure. Is this a DPMI problem with cwsdpmi or something I'm doing wrong? Help in allocating DOS memory in MS-DOS is appreciated. ======================================= #include #include #include #include #include #include int main() { int desc, segment; unsigned short selector; unsigned long linearaddr; __dpmi_meminfo meminfo; segment = __dpmi_allocate_dos_memory((16384+15)>>4, &desc); if (segment == -1) { printf("Couldn't allocate Dos memory.\n"); exit(1); } /* allocate error */ meminfo.size = 16384; meminfo.address = segment*16; if(__dpmi_physical_address_mapping(&meminfo) == -1) { printf("Could not convert phys addr into linear addr\n"); exit(1); } printf("it works\n"); } /* main */