Xref: news2.mv.net comp.os.msdos.djgpp:3685 From: Shawn Hargreaves Newsgroups: comp.os.msdos.djgpp Subject: Re: How to program DMA Date: Fri, 10 May 1996 10:05:58 +0100 Organization: The University of York, UK Lines: 42 Message-ID: NNTP-Posting-Host: tower.york.ac.uk Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII In-Reply-To: <1C660601A1@merlin2.e-technik.uni-erlangen.de> To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp On Thu, 9 May 1996, Michael Schuster wrote: > How can I program a Direct Memory Acess (DMA) Transfer from > an I/O card to my DJGPP V2 C/C++ programm? The I/O card > is in an ISA slot, and has to transfer 24 byte to my programm with a > frequency of 36 kHz. I have yet to find any good documentation on programming the DMA. There is some information in the PCGPE (x2ftp.oulu.fi/pub/msdos/programmer/pcgpe), but it is very sketchy. It's also complicated under djgpp by the fact that the DMA buffer usually has to be in the low megabyte of physical memory, so you need to use special DPMI calls to allocate DOS memory. There is some code that does this in my Allegro library (checkout dma.c and sb.c). > I know, I could also make this with an interrupt-handler, as the FAQ > says: > > " When your program runs under a DPMI host, hardware interrupts are > always passed to protected mode first ... However, if the interrupts > happen at a high frequency (say, more than 10 KHz), then the > overhead of the interrupt reflection from real to protected mode might > be too painful, and you might consider installing a real-mode interrupt > handler in addition to the protected-mode one. " > > So, if I am in the protected mode with the DPMI host, why is it faster > to switch to the realmode and get there the interrupt? Or don't I If you are already in protected mode there is no benefit in switching to real mode, and it wouldn't happen. But djgpp programs often spend large amounts of time in real mode when they make calls to DOS (eg. accessing the disk or reading keystrokes) and if the interrupt occurs at one of these times, it is faster if it doesn't need to switch. You get the speed from having _two_ interrupt handlers, so there is one for whichever mode you happen to be in when the interrupt occurs. /* * Shawn Hargreaves. Why is 'phonetic' spelt with a ph? * Check out Allegro and FED on http://www.york.ac.uk/~slh100/ */