Date : Sat, 19 Oct 1985 15:51:43 CDT
From : Paul Milazzo <milazzo@RICE.ARPA>
Subject: Re: Where's the DMA Address?
"Now, sooner or later my interrupt routine is going to want
to read a sector from the RAM-disk when an application
program has set the DMA address to somewhere other than the
default area." - Peter Kendell <pete@stc.UUCP>
Worse yet, it might try to do so during the execution of another system
call. In the case of CP/M 2.2 you can probably guard against this
eventuality simply by checking for saved PC >= base of BDOS. For CP/M+
one would also have to test for BANK not equal to 1 (as well as assure
the interrupt service routine resides in common memory!). Is there a
better way, anyone?
As for finding the DMA address, in CP/M+ it's kept in SCB+3C, but for
2.2 I'm not sure. It is passed to BIOS function 12 (SETDMA), so if you
have BIOS source you can figure out where your BIOS saves it. If not,
you might have to resort to disassembling BDOS function 26 (sigh...).
Paul G. Milazzo
Dept. of Computer Science
Rice University, Houston, TX
Domain: milazzo@rice.EDU
ARPA: milazzo@rice.ARPA
BITNET: milazzo@rice-net, milazzo@ricecsvm
UUCP: {cbosgd,convex,cornell,hp-pcd,shell,sun,ut-sally,waltz}!rice!milazzo