| www.delorie.com/archives/browse.cgi | search |
| 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 <stdio.h>
#include <sys/farptr.h>
#include <string.h>
#include <go32.h>
#include <dos.h>
#include <dpmi.h>
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 */
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |