| delorie.com/archives/browse.cgi | search |
| From: | Tim Updegrove <tupdegrove AT lucent DOT com> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Allocating DOS memory in Windows |
| Date: | Wed, 03 Nov 1999 10:59:34 -0500 |
| Organization: | Lucent Technologies |
| Lines: | 25 |
| Message-ID: | <38205BE6.B7CF872B@lucent.com> |
| NNTP-Posting-Host: | pai830tupdegrove.micro.lucent.com |
| Mime-Version: | 1.0 |
| X-Mailer: | Mozilla 4.61 [en] (Win95; I) |
| X-Accept-Language: | en |
| To: | djgpp AT Delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
This is a followup to a question on 10/15/99. I'm trying to get a program which allocates DOS memory for a DMA buffer to work when booting to MS-DOS and also work in a MS-DOS box under Windows 98. I can get each to work in a separate program but I'm hoping to find a solution that works both places in a single program. Here are the steps that I've found to work. Booting to MS-DOS: 1. Allocate DOS memory and use the returned segment*16 for the physical DMA address and use the returned selector with _farpeekl and _farpookl. In a MS-DOS box with Windows 98: 1. Allocate DOS memory and use the returned segment*16 for the physical DMA address. 2.Pass segment*16 into __dpmi_physical_address_mapping to obtain a linear address. 3. Create a segment selector with __dpmi_allocate_ldt_descriptors. The returned selector is used with _farpeekl and _farpookl. 4. Initialize the segment's base address & size with __dpmi_set_segment_base_address using the selector from step 3. 5. Initialize the segment's limit with __dpmi_set_segment_limit using the selector from step 3. Any help would be much appreciated.
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |