www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/11/03/22:23:21

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.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019