Date: Thu, 18 Jun 1998 09:42:59 +0300 (IDT) From: Eli Zaretskii To: Bernhard Gleich cc: djgpp AT delorie DOT com Subject: Re: physical memory location In-Reply-To: <3587e7b1.0@news.uni-ulm.de> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Precedence: bulk On 17 Jun 1998, Bernhard Gleich wrote: > This question should be in the FAQ, but I didn't find it. The FAQ, by its very definition, is the list of FREQUENTLY-asked questions. I don't invent the questions that go into it, I only gather them from this forum. And the question you asked is not a frequent one, so it's not there. > I'm trying to do some PCI DMA transfer. For this I need to know where > the physical address of my allocated memory is. But I could not find > any function that returns me this value. Could anyone point me to this > type of information? You could do one of these: - Use a buffer in low memory (below 1MB mark). This part of memory is usually mapped 1:1, so the linear address is also the physical address. You can allocate a buffer there using __dpmi_allocate_dos_memory. - Use the VDS (Virtual DMA Services) API, which is implemented as a bunch of functions of Interrupt 4Bh. See Ralf Brown's Interrupt List for details. This has a drawback that your program won't work without a real memory manager, like EMM386, QEMM or Windows, since CWSDPMI itself doesn't provide the VDS.