Date: Thu, 01 Mar 2001 21:56:26 +0200 From: "Eli Zaretskii" Sender: halo1 AT zahav DOT net DOT il To: damon AT redshift DOT com (Damon Casale) Message-Id: <3405-Thu01Mar2001215625+0200-eliz@is.elta.co.il> X-Mailer: Emacs 20.6 (via feedmail 8.3.emacs20_6 I) and Blat ver 1.8.6 CC: djgpp AT delorie DOT com In-reply-to: <3a9e955b.2750392@news.redshift.com> (damon@redshift.com) Subject: Re: Using DMA for hard disk access? References: <3a9e955b DOT 2750392 AT news DOT redshift DOT com> Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > From: damon AT redshift DOT com (Damon Casale) > Newsgroups: comp.os.msdos.djgpp > Date: Thu, 01 Mar 2001 18:36:06 GMT > > I'm trying to squeeze the last ounce of speed out of this compression > program, and I'm wondering if switching to direct DMA calls, as > opposed to using the INT13h or INT21h disk read-write calls, would > help things much. As far as programming in DJGPP goes, I know that it > takes a lot of CPU cycles to switch from protected mode to real mode, > and then back again, to make the interrupt calls. Would I avoid that > by doing DMA calls instead? I'm not sure. The conventional wisdom is that nowadays DMA doesn't gain too much when disks are concerned, but I never did anything like that myself, so it's hearsay. Keep in mind that while DMA moves data from the disk to memory or back, the system bus is not available. Therefore, you will have bus contention with any other device that goes through the bus. VGA, for example. What portion of the program's run time does it spend in I/O (i.e. in INT 13h and INT 21h calls)? If it's not 50% at least, it's probably not worth it to try to speed it up by switching to DMA. > I'm not entirely sure how to tell the hard drive what sectors I want > to read or write, but I _think_ I know how to use the DMA I/O ports. > Where would I look for more detailed info on this? In case you didn't see it, the DJGPP FAQ has something about using DMA in section 18.13.