From: "Miles F. Bintz Ii" Newsgroups: comp.os.msdos.djgpp Subject: Access phys. mem above 1 meg Date: Thu, 1 Oct 1998 11:15:59 -0400 Organization: Clarkson Univeristy Lines: 40 Message-ID: NNTP-Posting-Host: polaris.clarkson.edu Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Trace: news.clarkson.edu 907254963 26499 128.153.4.24 (1 Oct 1998 15:16:03 GMT) X-Complaints-To: abuse AT clarkson DOT edu NNTP-Posting-Date: 1 Oct 1998 15:16:03 GMT To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp I've read the FAQs but I still seem to be missing a piece of information... I want to access physical address 0xDA000000. I do the following: __dpmi_meminfo mi; mi.size = 0xfffff; mi.address = 0xDA000000; selector == __dpmi_allocate_ldt_descriptors(1); __dpmi_physical_address_mapping(&mi); __dpmi_lock_linear_region(&mi); __dpmi_set_segment_base_address(selector, mi.address); __dpmi_set_sedment_limit(selector, mi.size); And so now I have a selector to my physical address at DA000000 right? Well, what do I do with a selector? I don't want to use the near/far ptr hacks. I would like to be able to say char *myptr = 0xda000000 myptr[0] = 0xab; for example. But I dont know what the proper method of getting a selector into a ponter is... Can someone explaing to me what I need to do? If I cant do what I stated above, can someone explain what happens "behind the scenes" for a piece of data to get out to memory via a selector? Performance will be an issue futher down the road so I would like the knowledge on how everything is working here in case I need to optimize something..... Thanks! -Miles