Hi all -- Been working on an MSCP implementation for Joerg Hoppe's Unibone project, and it's working well on PDP-11 systems; less well as of late on the VAX. I've been looking to tidy up a few dark corners in the MSCP spec and one thing that's left is bus adapter purges -- I have a pretty good grasp of Unibus mechanics these days but I'm not quite understanding the reasoning behind this. Here's what the Storage System Unibus Port Description (AA-L621A-TK) document says:
"To support such higher-level protocol functions as transfer restarts, compares, etc., the host memory interface must allow repeated access to a given host memory location for both reads and writes. On purely Unibus systems such as 11/44, this requirement is trivially met with no participation by the host CPU. On systems with bus adapters such as the 11/780, the repeated access requirement means that the relevant adapter channel may have to be purged, requiring the active cooperation of the host CPU. The port signals its desire for an adapter channel purge by interrupting the host. The host writes zeroes to the SA register to indicate purge completion." This is also discussed, from the bus adapter point of view, in the technical documentation for the bus adapter itself. (See http://www.vaxhaven.com/images/2/29/EK-DW780-TD-001.pdf) It hasn't been particularly enlightening to me, but I will admit to not having read every page of this and the DW780 doc -- maybe I missed something :). I understand the mechanism here; in essence it's: 1) MSCP controller decides a purge is necessary after a DMA transfer and requests one by setting a value in a reserved slot in the communications area 2) Host system (MSCP driver) sees the special value, and issues a purge command to the bus adapter. 3) Host system then clears the value in the communications area 4) MSCP controller continues on its merry way. What I do not understand is (a) why such purges are necessary, and (b) how the MSCP controller knows when one should occur. The Port Description doc hints that it has to do with repeated access to a given area of memory. The DW780 documentation hints that it needs to happen after *any* block transfer. (See pg. 2-58 of the document linked above.) Anyone have any experience with this? Thanks! Josh