Date : Sun, 31 May 1981 (Sund:00ay) 1709-EDT
From : PLATTS@WHARTON-10 (Steve Platt)
Subject: DMA address finding
... yes, I know the "default" DMA area is at 80h. However, my situation
is roughly like this: I have implemented the full IOBYTE (mostly with
the aid of a TDL SMB card), I have room for 2K worth of misc. routines
well above CPM. My user printer device is (to be) a disk-spooler; it
has its own buffer -- it must keep this buffer separate from the transient's
IO buffers (remember, we are never sure what the transient will be
or what/how many DMA areas it may be switching among). So when it comes
time for the spooler to write a buffer-full, it must save the old
DMA address, set DMA addr to the new buffer (its own), write, and then
reset the old DMA address. If I could guarantee that all transients
obey the sequence "set dma(addr); write" whenever they went to write, there'd
be no problem. But I cannot.
It looks as if I'll stick with that which Ron Fowler suggested,
0005 jmp bdos
<bdos> jmp wherever -> <bdos> jmp mypat (above f800 somewhere)
<mypat> if code=setdma then mysavearea=newaddress
jmp wherever
... aggh, patches and patches on patches...
Thanks to all who responded,
-Steve