X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f NNTP-Posting-Date: Tue, 18 Aug 2009 22:33:44 -0500 From: "Charles Sandmann" Newsgroups: comp.os.msdos.djgpp References: Subject: Re: freedos and cwsdpmi with djgpp under Linux? Date: Tue, 18 Aug 2009 22:33:34 -0500 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5843 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-RFC2646: Format=Flowed; Original Message-ID: Lines: 49 X-Usenet-Provider: http://www.giganews.com NNTP-Posting-Host: 64.91.192.48 X-Trace: sv3-otDtMMWZxg1U95ehWehzbd66rplLOL342DBe+jirJRVrWnOouCiNJe6cOGE63q+GiSMk4Gwo6MXxOx8!s4JfMvpxsFhmBxaeZ73tadisD/LjX7YZN1cPgXbi0pq2hZSgC1v4dUE3xf6jDp0AD+wq8rgrqFaV!E93k351DrB5WftEKt/RuZMCbFSSQ6gs= X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.39 X-Original-Bytes: 3320 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com >> If you absolutely need an XMS block, you need to >> "prepare" for it before running CWSDPMI (such as >> allocate the block you need, allocate a second tiny block, >> release the first block). > > I don't suppose you have an example of this method? Not immediately, it's on a CD someplace (using TC if I remember correctly). In a pinch it could be done with debug.com :-) > Basically I need a 1 Megabyte DMA buffer for a PCI card that has DMA > capability. OK! > I got both cwsdma.zip and cwsdma2.zip, thanks for passing those > along. When I run #2 I get: > > Allocated 8M DMA buffer at DJGPP address 0x93b00, physical 0x113b00 > Virtual: 0x1000 Physical: 0x100000 Size: 0x13000 > Virtual: 0x91000 Physical: 0x916000 Size: 0x1000 > Virtual: 0x92000 Physical: 0x914000 Size: 0x1000 > Virtual: 0x93000 Physical: 0x113000 Size: 0x1000 > Virtual: 0x94000 Physical: 0x115000 Size: 0x7ff000 > Virtual: 0x893000 Physical: 0x114000 Size: 0x1000 > Virtual: 0x897000 Physical: 0x915000 Size: 0x1000 > > Looking at the Physical address, it's apparent that they are not > contiguous. If I used XMS would I get a contiguous one? XMS would make it contiguous. But in the example above, you have a nice big chunk. If you look closely at the physical addresses you can see it's actually even more contigous than it intially appears. Potentially you should allocate the memory using sbrk() instead of malloc(), then immediately touch it all (in sequence) to make sure it is contiguous. Or do your own scatter/gather. (note that chunk 1 -> chunk 4 -> chunk 6 -> chunk 5 -> chunk 3 -> chunk 7 -> chunk 2 is all contiguous). Advantage of doing your own internal allocation and mapping is that it does not depend on XMS (it will work in raw mode without XMS, or even with EMM / VCPI loaded and no preparation program). But if you only need 1MB, and allocate 2MB you can probably find a nice contiguous 1MB chunk someplace without even bothering to map.